android - 在 AsyncTask 未结束之前如何防止旋转

标签 android android-activity android-asynctask

我注意到,如果我在 AsyncTask 运行时尝试旋转设备,应用程序会崩溃。 这seems caused事实上,Activity 在循环中被销毁并重新创建。

为了避免这种情况,我想捕获旋转事件并仅在没有 Activity 的 AsyncTask 时执行它...如果有 Activity 的 AsyncTask ,应用应暂停旋转并在这些完成后执行。

我该怎么做?

最佳答案

无法暂停屏幕旋转。您只能在 Activity list 条目中使用 configChanges 完全停止它(但这是不好的做法)。你应该做的是把你的异步任务放在保留的 fragment 中。直到最近,您还可以使用 Activity.getLastNonConfigurationInstanceActivity.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/

相关文章:

android - 使用 AsyncTask 打开相机

android - 在 TabLayout 中禁用标签

javascript - 音频播放器错误 : stopPlaying() called during invalid state: 0

Android - 返回调用Activity

java - 如何从 Activity C 恢复 Activity B?

java - AsyncTask onPostExecute 对话框不起作用

java - 具有网络操作的 Asynctask 和另一个 Asynctask 任务问题

android - 在android中插入外部数据库

java - Android 中的微调项目

android - Android Nougat 锁屏中 URI 的 startActivity