2012-03-03 70 views
2

我正在嘗試編寫一個AsyncTask通用包。直到現在,我所做的是從另一個調用一個活動,將Intent中的實例發送到該活動。此活動是調用AsyncLoader.execute()文件的AsyncTask的一部分。我正在這樣做,以便我不會丟失父Activity在佈局上設置的任何數據。這是實現AsyncTask的最佳方式嗎?或者有更好的方法嗎?

另一種方法是調用Intent並將數據從AsyncActivity返回給父活動。但是,這兩種方法都比在父活動中實施AsyncTask慢。

但是,這混亂了代碼。那麼,有沒有更好的實施方式?

回答

3

這聽起來像你的活動和AsyncTask之間的緊密耦合導致你嘗試用奇怪的解決方法克服的問題。

在我的經驗,最好的方式來設計需要的是的AsyncTask活動:

  • 保持你的AsyncTask您的活動,即讓一個單獨的類 該extends AsyncTask。這使您可以在多個活動之間重複使用AsyncTask ,並使測試更加容易。
  • 如果您需要將數據返回給您的活動,請使用偵聽器並在您的活動中實施偵聽器。然後將你的監聽器傳給一個創建AsyncTask的類。

意圖之間的數據傳遞應該保持在最低限度,如果您需要從單獨的活動中重複使用相同的AsyncTask,則應遵循上述步驟並再次執行任務。如果您打算在應用的整個生命週期中調用此功能,請考慮使用service

+0

我同意這是一個可怕的工作。 – Hick 2012-03-03 17:38:47

+0

我以各種其他方式在Intents中傳遞大量數據。這是否是一種糟糕的做法? – Hick 2012-03-03 17:42:10

+0

你應該只在類之間傳遞簡單的域對象(即只是封裝數據的類)而不是複雜的對象來執行任務。目的是爲了提供所需的數據,但不應該決定如何使用數據 - 這應該是活動的責任。 – 2012-03-03 17:53:19