处理Activity和Thread之间关系的常见做法是什么

时间:2012-07-08 03:03:11

标签: android multithreading android-asynctask orientation-changes android-configchanges

我有以下情况

  1. 我从Thread生成了一个长期运行的用户线程(Activity)。
  2. 我按下软按钮。所以,Activity被破坏了。
  3. 我再次启动相同的Activity。请注意,之前发布的Thread仍在运行。
  4. 为了让我阻止Activity在前一个Thread仍在运行时启动另一个Thread,这就是我正在做的事情

    • 启动Thread后,我会将其存储到静态变量中。所以,下次当我尝试启动同一个线程时,我将通过静态变量检查前一个线程的活跃性。 这是一个好习惯吗?克服这个问题的最佳做法是什么?

    注意,用户线程正在引用启动它的Activity。但是,当用户按下软按钮时,Activity可能会被破坏。因此,当我再次启动新活动时,thread并未意识到这一点,并且仍然指的是旧的Activity。因此,当用户线程尝试访问旧Activity的任何成员时,崩溃将在Activity已被销毁时发生。 克服这个问题的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

解决此问题的最佳方法是使用AsyncTask代替。如果在执行任务时销毁ActivityAsyncTask(及其执行操作的基础Thread)将继续执行,直到doInBackground()完成。如果在Activity被调用时nullonPostExecute,则出于此 {{3}中所述的原因,您不会遇到任何NullPointerException }

如果您想在用户“退出”Activity时立即取消该任务,则可以在mTask.cancel()的{​​{1}}上致电AsyncTask Activity方法。

如果想要在用户“退出”onDestroy时立即取消任务,那么您的长期操作听起来并不像是特定的到任何Activity实例。在这种情况下,通常建议使用Activity代替。