Android 在这种情况下,AyncTask的具体行为如何?

Android 在这种情况下,AyncTask的具体行为如何?,android,Android,有一个AsyncTask,它从web获取某些内容,然后在onPostExecute(…)中调用Activity.showDialog。 如果 我在活动B中启动异步任务 回到活动A AsyncTask完成其作业(doInBackground()返回) ??调用了onPostExecute()吗?根据异步任务的实现方式,您可能会“泄漏”活动B,直到异步任务完成。理想情况下,当活动B被销毁时,您的AsyncTask应该被取消。根据AsyncTask的实现方式,您可能会“泄漏”活动B,直到AsyncTa

有一个AsyncTask,它从web获取某些内容,然后在onPostExecute(…)中调用Activity.showDialog。 如果

  • 我在活动B中启动异步任务
  • 回到活动A
  • AsyncTask完成其作业(doInBackground()返回)

  • ??调用了onPostExecute()吗?

    根据异步任务的实现方式,您可能会“泄漏”活动B,直到异步任务完成。理想情况下,当活动B被销毁时,您的AsyncTask应该被取消。

    根据AsyncTask的实现方式,您可能会“泄漏”活动B,直到AsyncTask完成。理想情况下,当活动B被销毁时,您的异步任务应该被取消。

    我发现活动完成对异步任务没有影响。我在onPostExecute()中有showDialog()调用。这会导致在用户按下BACK键时强制关闭,“活动”完成并调用onPostExecute()。

    我发现“活动”完成这一事实对异步任务没有影响。我在onPostExecute()中有showDialog()调用。这会导致在用户按下BACK键时强制关闭,“活动”完成并调用onPostExecute()。

    My AsyncTask是一个静态类,对“活动”的引用由setActivity()方法设置。我在OnRetainOnConfiguration Instance()中返回AsyncTask,在方向更改后,我使用GetLastNonConConfiguration Instance()检索它并调用setActivity()。我在Android Market上看到WindowManager.BadTokenException报告,这可能是由于我使用AsyncTask的方式造成的吗?@fhucho:可能。您无法从
    doInBackground()
    安全地引用
    活动。如果避免这种情况,并从新活动实例的
    onCreate()
    再次调用
    setActivity()
    ,理论上,您应该是安全的。至少,这是不久前我与Hackborn女士在
    android开发者组
    上交流的结果。@commonware我使用的是你在这里描述的模式:(请参阅我的评论)。但是我注意到我没有分离活动,这可能是问题所在。我的AsyncTask是一个静态类,对活动的引用由setActivity()方法设置。我在OnRetainOnConfiguration Instance()中返回AsyncTask,在方向更改后,我使用GetLastNonConConfiguration Instance()检索它并调用setActivity()。我在Android Market上看到WindowManager.BadTokenException报告,这可能是由于我使用AsyncTask的方式造成的吗?@fhucho:可能。您无法从
    doInBackground()
    安全地引用
    活动。如果避免这种情况,并从新活动实例的
    onCreate()
    再次调用
    setActivity()
    ,理论上,您应该是安全的。至少,这是不久前我与Hackborn女士在
    android开发者组
    上交流的结果。@commonware我使用的是你在这里描述的模式:(请参阅我的评论)。但是我注意到我没有分离活动,这可能是问题所在。如果您仍然可以处理上下文/活动,您应该在创建对话框之前进行检查。是的。。。我正在使用这个模式-。我将不得不做一个小的修改来修复这个错误。现在,我正在从OnRetainOnConfigurationInstance()中的AsyncTask中分离我的活动。我将把分离移动到onDestroy(),这将解决我的问题。如果您仍然可以处理上下文/活动,则在创建对话框之前应始终进行检查。是的。。。我正在使用这个模式-。我将不得不做一个小的修改来修复这个错误。现在,我正在从OnRetainOnConfigurationInstance()中的AsyncTask中分离我的活动。我将把分离移动到onDestroy(),这将解决我的问题。