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

标签 java android multithreading

我有一个涉及线程和从方向变化中恢复的问题。我见过很多涵盖线程或方向变化的优秀答案,但很少有涵盖这两者的答案。这是涵盖我的问题的一般场景:

  1. 应用启动时,包含一个 Activity:一个 TextView,其中填充了变量“count”(最初为 0)、一个“开始”按钮和一个“停止”按钮。
  2. “开始”按钮启动线程(使用线程),该线程循环递增 数字并更新 TextView。
  3. 停止按钮设置 boolean 标志,以便线程退出。
  4. 所有变量都是全局的和 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/

相关文章:

java - Spring Boot,通过 POST 从 InputStream 上传文件时出现 RestTemplate 异常

java - 创建 x.509 证书时出错

java - 是否多线程任务?

java - 如何在 Android 中检测暗照片

C# 应用程序创建许多连接线程,MySQL

linux - 内存分配中的锁争用——多线程与多进程

java - Spring Boot 无法启动 Tomcat 8

java - Android 9.0 Activity 泄露了最初添加的窗口

java - SerializationException 在 Android Studio 中为 LibGDX uiskin 读取 JSON 文件时出错

c - C 线程程序的 sched_yield