Android:在方向更改后恢复暂停的线程

时间:2015-10-02 16:15:45

标签: java android multithreading

我有一个涉及线程并从方向更改中恢复的问题。我已经看到了很多很好的答案,涵盖了线程或方向的变化,但很少有很多能够涵盖两者。以下是涵盖我的问题的一般情景:

  1. 应用程序启动,包含一个活动:一个TextView填充变量" count",最初为0,START和STOP按钮。
  2. 开始按钮启动线程(使用Thread),循环递增 数字并更新TextView。
  3. 停止按钮设置布尔标志,以便线程退出。
  4. 所有变量global and volatile,用于控制线程的对象变量信号。
  5. 现在,处理方向更改的最佳方法是什么。我假设我:

    • 在onPause()中,我调用signal.wait()来暂停线程
    • 保存变量" counter" on onSaveInstanceState()
    • 在onResume()中我得到" counter"从onRestoreInstanceState()
    • 返回

    由于onCreate()将为" signal"创建一个新的Object,如何重新建立一个到当前wait()的线程的链接,以便我可以调用notify()并恢复它?

    我尽我所能解释了这一点,我会尝试提供所要求的任何其他信息。

1 个答案:

答案 0 :(得分:0)

Activity的生命周期经过精心设计,可以根据系统需求或用户交互进行销毁和重新创建,因此一般来说,任何应用内操作也应该在发生这些生命周期变化时被销毁并重新创建。例外情况是长时间运行的进程,除了活动(如服务)之外在后台运行。

因此,要回答您的问题,而不是尝试暂停和恢复线程,最好在Activity重新启动时简单地重新启动线程,并将Thread您的计数器变量作为指示计数停止的位置。您已经将此变量保存在savedInstanceState中,因此只需在Activity的开头抓取它,然后将其传递到您的(新)线程中继续计数。