但我的问题仍然没有解决,因为提供的大多数解决方案都没有建议或弃用。
我有AsyncTask
,我不断更新TextView
文字。在切换按钮单击中启动任务的执行。最初我将AsyncTask
作为主要活动的内部类。但后来我把它改成了外部课程。
我使用onSaveInstanceState()
和onRestoreInstanceState()
方法在方向更改期间存储和恢复textview值。我无法实现的是在定位之后,如何恢复按钮状态并恢复AsyncTask
?
答案 0 :(得分:2)
使用Application
类,它始终可用,并将任务存储在静态变量中。
使用setRetainInstance(true)
向活动添加虚拟片段,使用它来存储和运行AsyncTasks。它将在旋转时自动附加,Activity可以通过标记再次找到它。
使用服务运行后台内容,后台服务不受旋转重启的影响,Activity可以再次绑定到它。
答案 1 :(得分:1)
根据此页面:http://developer.android.com/guide/topics/manifest/activity-element.html#config,如果您的应用程序的目标是API级别13或更高级别,则应使用android:configChanges="orientation|screenSize"
将屏幕旋转捕获到onConfigurationChanged()
方法中。
通过执行此操作,不会调用onPause
和onResume
方法,因此TextView将保留其值。在我看来,它不会阻止正在运行的AsyncTask。如果是,请尝试在onConfigurationChanged
方法中重新调用它。
答案 2 :(得分:0)
为什么不能将按钮状态保存到onSaveInstanceState(...)
的捆绑包中,并在onCreate(...)
期间恢复它,因此根据按钮状态恢复AsyncTask?请注意,我的经验是onCreate(..)通常在方向更改后调用,而不是onRestoreInstanceState()
。