以下是该方案:
如何确保上述内容不“炸弹”?
答案 0 :(得分:1)
Android开发中一个非常常见的障碍。当我第一次偶然发现这个问题时,我发现这个Q有很多很好的讨论,为我提供了很多东西:
Is AsyncTask really conceptually flawed or am I just missing something?
AsyncTask的作者必须确保它的孤立完成是“安全的”或者取消/中止。传统的观点是从Activity的onPause或onDestroy中取消(或者至少在逻辑上通过自己滚动的某种机制,如@iagreen建议的那样分离)Task实例。
Ideal way to cancel an executing AsyncTask
Android团队成员经常围绕网络进行指导,AsyncTask旨在用于生命周期与其父活动的“预期”生命周期非常匹配的简短操作,因此如果您发现自己正在进行长期运营并且必须恢复部分您可能希望查看显式线程管理或编写服务等的进度等等:
http://developer.android.com/reference/android/app/Service.html
答案 1 :(得分:1)
主要问题是'AsyncTask通常被定义为Activity
的非静态内部类。这意味着它拥有对Activity
的引用。如果您的Activity
因任何原因被销毁或销毁并重新创建,则您的AsyncTask
仍然会引用您的“旧”Activity
。由于该活动不再附加到UI,因此如果您尝试修改和UI组件,则会出现异常。
一个选项是在onStop()中设置Activity的状态 - 有一个布尔变量来指示进程是否已停止。在更新UI之前检查一下。