我有以下情况
Thread
生成了一个长期运行的用户线程(Activity
)。Activity
被破坏了。Activity
。请注意,之前发布的Thread
仍在运行。为了让我阻止Activity
在前一个Thread
仍在运行时启动另一个Thread
,这就是我正在做的事情
Thread
后,我会将其存储到静态变量中。所以,下次当我尝试启动同一个线程时,我将通过静态变量检查前一个线程的活跃性。 这是一个好习惯吗?克服这个问题的最佳做法是什么? 注意,用户线程正在引用启动它的Activity
。但是,当用户按下软按钮时,Activity
可能会被破坏。因此,当我再次启动新活动时,thread
并未意识到这一点,并且仍然指的是旧的Activity
。因此,当用户线程尝试访问旧Activity
的任何成员时,崩溃将在Activity
已被销毁时发生。 克服这个问题的最佳做法是什么?
答案 0 :(得分:1)
解决此问题的最佳方法是使用AsyncTask
代替。如果在执行任务时销毁Activity
,AsyncTask
(及其执行操作的基础Thread
)将继续执行,直到doInBackground()
完成。如果在Activity
被调用时null
为onPostExecute
,则出于此 {{3}中所述的原因,您不会遇到任何NullPointerException
} 强>
如果您想在用户“退出”Activity
时立即取消该任务,则可以在mTask.cancel()
的{{1}}上致电AsyncTask
Activity
方法。
如果不想要在用户“退出”onDestroy
时立即取消任务,那么您的长期操作听起来并不像是特定的到任何Activity
实例。在这种情况下,通常建议使用Activity
代替。