如何在方向/配置更改期间处理正在运行的AsyncTask?

时间:2013-05-02 07:11:10

标签: android android-asynctask android-orientation

我知道这个问题已经多次讨论过,如herehere

但我的问题仍然没有解决,因为提供的大多数解决方案都没有建议或弃用。

我有AsyncTask,我不断更新TextView文字。在切换按钮单击中启动任务的执行。最初我将AsyncTask作为主要活动的内部类。但后来我把它改成了外部课程。

我使用onSaveInstanceState()onRestoreInstanceState()方法在方向更改期间存储和恢复textview值。我无法实现的是在定位之后,如何恢复按钮状态并恢复AsyncTask

3 个答案:

答案 0 :(得分:2)

  1. 使用Application类,它始终可用,并将任务存储在静态变量中。

  2. 使用setRetainInstance(true)向活动添加虚拟片段,使用它来存储和运行AsyncTasks。它将在旋转时自动附加,Activity可以通过标记再次找到它。

  3. 使用服务运行后台内容,后台服务不受旋转重启的影响,Activity可以再次绑定到它。

答案 1 :(得分:1)

根据此页面:http://developer.android.com/guide/topics/manifest/activity-element.html#config,如果您的应用程序的目标是API级别13或更高级别,则应使用android:configChanges="orientation|screenSize"将屏幕旋转捕获到onConfigurationChanged()方法中。

通过执行此操作,不会调用onPauseonResume方法,因此TextView将保留其值。在我看来,它不会阻止正在运行的AsyncTask。如果是,请尝试在onConfigurationChanged方法中重新调用它。

答案 2 :(得分:0)

为什么不能将按钮状态保存到onSaveInstanceState(...)的捆绑包中,并在onCreate(...)期间恢复它,因此根据按钮状态恢复AsyncTask?请注意,我的经验是o​​nCreate(..)通常在方向更改后调用,而不是onRestoreInstanceState()