我已经被这个困扰有一段时间了。当我有一个单独的屏幕时,如何正确处理屏幕方向的变化Thread
/ AsyncTask
跑步?目前,我有
android:configChanges="orientation|keyboard|keyboardHidden"
in my AndroidManifest.xml
,但那就是并没有真正受到鼓励 http://developer.android.com/guide/topics/manifest/activity-element.html#config:
Note:应避免使用此属性,并且仅将其用作最后的手段。请阅读处理运行时更改以获取有关如何正确处理由于配置更改而重新启动的更多信息。
另外,在2.3 模拟器,切换到时有效landscape
,但切换回portrait
fails.
现在,我使用的原因configChanges
是因为当用户切换方向时,我可能会有一个AsyncTask
运行,进行一些网络流量,我不希望它停止。
有没有其他方法可以做到这一点,或者有没有办法修复 2.3 以切换回纵向?
我知道关于onRetainNonConfigurationInstance
,但我不确定“保存”是个好主意AsyncTask
实例,主要是因为扩展的类AsyncTask
不是静态的(因此它与Activity
)——这是必须的,因为在onPostExecute()
它从调用方法Activity
实例。
我遇到了与您类似的问题,并通过实施解决了这个问题AsyncTask
作为继承自的类的一部分Application http://developer.android.com/reference/android/app/Application.html班级。一个Application
类在应用程序的整个生命周期内都可用,因此您不必担心您的AsyncTask
除非整个应用程序被终止,否则会被中断。
任务完成时收到通知Activity
必须实现一个接口,用于将自己注册到Application
class.
当您的应用程序因屏幕旋转而被破坏时,您可以注销您的应用程序Activity
来自Application
类并在重新创建时重新注册它。如果任务在销毁和重新创建之间完成,则操作结果可以存储在Application
同时上课所以Activity
可以检查任务是否仍在运行或者重新创建时结果是否已经可用。
另一个优点是您可以直接访问应用程序上下文,因为Application
类是 的子类Context
class.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)