2

我有以下情况

  1. ThreadActivity.
  2. 我按下软后退按钮。就这样,Activity被毁了。
  3. 我再次启动相同的Activity。注意,之前启动Thread的仍在运行。

为了防止在前一个仍在运行时Activity启动另一个相同的,这就是我正在做的ThreadThread

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

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

4

1 回答 1

1

克服这个问题的最好方法是使用 an AsyncTask。如果在Activity任务执行时 被销毁,则AsyncTask(及其Thread执行操作的底层)将继续执行直到doInBackground()完成。如果sActivity被调用,您将不会null因为这篇文中所述的原因onPostExecute而遇到任何s 。NullPointerException

如果您想在用户“退出”时立即取消任务,Activity您可以调用mTask.cancel()AsyncTask的方法。ActivityonDestroy

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

于 2012-07-08T03:19:42.730 回答