2011-02-11 54 views
0

有一個AsyncTask從網上獲取某些東西,然後調用onPostExecute(...)中的Activity.showDialog。如果AyncTask在這種情況下的表現如何?

  1. 我在活動B開始的AsyncTask
  2. 回到活動 到底發生了一個
  3. 的AsyncTask完成它的工作(doInBackground()返回)

?是否調用onPostExecute()?

回答

0

我發現我的Activity完成的事實對AsyncTask沒有影響。我在我的onPostExecute()中調用了showDialog()。當用戶按下BACK時,這導致強制關閉,活動結束並調用onPostExecute()。

3

根據AsyncTask的實現方式,您可能會「泄漏」Activity B,直到AsyncTask完成。理想情況下,當活動B被銷燬時,您的AsyncTask應該被取消。

+0

我的AsyncTask是一個靜態類,對Activity的引用是通過setActivity()方法設置的。我在onRetainNonConfigurationInstance()中返回AsyncTask - 在方向更改後,我使用getLastNonConfigurationInstance()檢索它並調用setActivity()。我在Android電子市場中看到了WindowManager.BadTokenException報告,它可能是由我如何使用AsyncTask的方式引起的? – fhucho 2011-02-11 22:23:25

+0

@ fhucho:可能。你不能從`doInBackground()`安全地引用`Activity`。如果你避免這種情況,並且從新的活動實例的onCreate()再次調用`setActivity()`,理論上你應該是安全的。 Leastways,這是我前一段時間與Hackborn女士就android-developers組進行交流的最終結果。 – CommonsWare 2011-02-11 23:07:30