我有一个涉及线程和从方向变化中恢复的问题。我见过很多涵盖线程或方向变化的优秀答案,但很少有涵盖这两者的答案。这是涵盖我的问题的一般场景:
- 应用启动时,包含一个 Activity:一个 TextView,其中填充了变量“count”(最初为 0)、一个“开始”按钮和一个“停止”按钮。
- “开始”按钮启动线程(使用线程),该线程循环递增 数字并更新 TextView。
- 停止按钮设置 boolean 标志,以便线程退出。
- 所有变量都是全局的和 volatile 的,对象变量信号用于控制线程。
现在,处理方向变化的最佳方法是什么。我假设我:
- 在onPause()中,我调用signal.wait()来暂停线程
- 在 onSaveInstanceState() 上保存变量“counter”
- 在 onResume() 中,我从 onRestoreInstanceState() 返回“计数器”
由于 onCreate() 将为“信号”创建一个新对象,因此如何重新建立到当前正在 wait() 的线程的链接,以便我可以调用 notification() 并恢复它?
我已尽力解释这一点,我会尽力提供所需的任何其他信息。
最佳答案
Activity 的生命周期经过精心设计,可以根据系统需求或用户交互来销毁和重新创建,因此一般来说,当这些生命周期发生更改时,任何应用内操作也应该被销毁并重新创建。异常(exception)情况是除了 Activity (如服务)之外在后台运行的长时间运行的进程。
因此,为了回答您的问题,最好在 Activity 重新启动时重新启动线程,并向线程提供计数器变量作为计数停止位置的指示器,而不是尝试暂停和恢复线程。您已经将该变量保存在 savingInstanceState 中,因此只需在 Activity 开始时获取它,然后将其传递到您的(新)线程以继续计数即可。关于java - Android:方向更改后恢复暂停的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32911491/