2013-04-25 54 views
1

我正在使用一個簡單的AsyncTask將網頁的源代碼作爲字符串下載。到目前爲止一切正常。AsyncTask從很多地方調用了很多

但是,我不想總是對結果字符串做同樣的事情,有時我想用它填充gui,有時候我想分析它,有時我想調用更多的函數作爲參數。 其實,我有一個以上的活動和不止一個類需要下載頁面的源代碼。

當然,onPostExecute()是什麼必須處理我的任務的結果,但因爲它將被從這麼多地方調用,併爲了這麼多不同的原因,我真的很茫然。

我該怎麼辦?

我真的不想寫20個AsyncTasks,它們在doInBackground(...)中使用不同的onPostExecute執行相同的操作,也不希望來自20個不同類/活動的代碼在單個onPostExecute中結束,我的代碼將會非常複雜。

有什麼建議嗎? 謝謝

+1

爲什麼不創建一個公共類共享的方法將其他類。 – 2013-04-25 13:38:07

+0

編寫自定義AsyncTask類覆蓋/實現現有的 – bofredo 2013-04-25 13:57:58

回答

1

我會用接口來解決它。做一個在doInBackground中做正確的事情的異步任務,並且需要一些參數,以便知道在onPostExecute中要做什麼並將參數和結果傳遞給onPostExecute。

然後用類似的方法創建接口handleSourceCodeString(String source);然後爲您想要執行的每個操作實施一個類。然後把這些類放在一個init函數的map中。

Map<String, Class> myActionMap = new HashMap<String,Class>; 
myActionMap.put("parse-soruce", ParseSource.class) //(where ParseSource.class implements your interface) 

,然後在postExecute做這樣的事情:

((MyActionInterface)myActionMap.get(action).newInstance()).handleSourceCodeString(source);