在轮换期间保持AsyncTask,但不在活动删除时保留

jmb*_*ard 7 android

我有一个运行简单的AsyncTask的Activity.为了在屏幕旋转期间保持AsyncTask运行,我使用onRetaingNonConfigurationInstance()将AsyncTask传递给新的Activity,如线程如何在屏幕旋转期间处理AsyncTask的答案之一中所建议的那样然后我更新指向AsyncTask中的Activity的指针,以确保它仍然可以从onProgressUpdate()更新进度对话框.

我的问题是使用这种方法我无法检测Activity是否只是旋转(在这种情况下我想继续运行AsyncTask)或者如果Activity被Home按钮隐藏,在这种情况下我想停止AsyncTask .但是我可以检测后退按钮的用法,因为在这种情况下,Activity的isFinishing()返回true;

有没有可用于区分旋转与主页按钮使用的机制?

Flo*_*Flo 2

如果按下主页按钮,则不应调用 onRetaingNonConfigurationInstance() 方法。因此,您可以使用在 onRetaingNonConfigurationInstance() 中设置的一些布尔变量true。然后onDestroy(),您可以检查变量并在其静止时停止 AsyncTask false

更新

我再次考虑了我的解决方案,经过一番搜索后,我认为这是错误的,因为如果按主页按钮,则不会调用 onDestroy() 。并且 onStop() 在 onRetaingNonConfigurationInstance() 之前调用,因此停止 AsyncTask 会太早,因为您不知道它是否是配置更改。

一个丑陋的解决方法是在 oStop() 中调用 AsyncTask 上的一个方法,该方法在 AsynTask 上初始化某种自我销毁,然后如果是配置更改,您可以在 onRetaingNonConfigurationInstance() 中再次停止该方法。正如我所说,它不是很优雅。