我注意到,如果我在 AsyncTask
运行时尝试旋转设备,应用程序会崩溃。
这seems caused事实上,Activity
在循环中被销毁并重新创建。
为了避免这种情况,我想捕获旋转事件并仅在没有 Activity 的 AsyncTask
时执行它...如果有 Activity 的 AsyncTask
,应用应暂停旋转并在这些完成后执行。
我该怎么做?
最佳答案
无法暂停屏幕旋转。您只能在 Activity list 条目中使用 configChanges 完全停止它(但这是不好的做法)。你应该做的是把你的异步任务放在保留的 fragment 中。直到最近,您还可以使用 Activity.getLastNonConfigurationInstance和 Activity.onRetainNonConfigurationInstance在 Activity 被销毁和重新创建之间保留对 AsyncTask 的引用,但现在已弃用。但您仍然可以使用它。
阅读此处了解更多信息:http://developer.android.com/reference/android/app/Activity.html#onRetainNonConfigurationInstance()
还有:
if I try to rotate the device during AsincTask the App crashes
这实际上不应该发生,您可能会在 AsyncTask 中保留对 Activity 的引用并在它被销毁后使用它。这称为引用泄漏。为避免它在 WeakReference 中保持对 Activity 的引用,如果您的 AsyncTask 是内部类,则将其设为静态。如果可能,请在 Activity.onDestroy 中销毁您的异步任务 - 通过取消它,在异步任务中检查它是否被取消并停止处理。如果您使用它来下载内容,请考虑保留 fragment 或 IntentService。
关于android - 在 AsyncTask 未结束之前如何防止旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28001572/