2011-02-11 55 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