Android使用Thread的interrupt与sleep,重启或暂停线程任务
来源:互联网 发布:寄生虫学怎么学 知乎 编辑:程序博客网 时间:2024/05/22 05:17
Android使用Thread的interrupt与sleep,重启或暂停线程任务
本文给出一个例子,简单说明如何在Android诸如Activity中,重启或者暂停一个正在无限运作的线程。
需求描述:假设在Android的Activity中,有一个线程,永不停息的运作,若当前Activity处于用户可见状态时候,每隔一秒输出一个自增长的计数器值,但是当Activity处于用户不可见时候,暂停线程输出,即中断线程执行。
实现这一机制的关键点简言之,借助Thread的sleep,让sleep在一定条件下(比如一个状态机布尔值)休眠一个极大值Long.MAX_VALUE。然后在Android的Activity生命周期回调中,重新赋值状态机布尔值,同时使用Thread的interrupt方法,打断当前处于休眠状态的线程,使之重新恢复正常运转。
代码如下:
- package zhangphil.thread;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.util.Log;
- public class MainActivity extends AppCompatActivity {
- private String TAG = “输出”;
- private int count = 0;
- private boolean RUN = true;
- private LongTimeWork mThread = new LongTimeWork();
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mThread.start();
- }
- private class LongTimeWork extends Thread {
- @Override
- public void run() {
- while (true) {
- try {
- if (!RUN) {
- Thread.sleep(Long.MAX_VALUE);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- count++;
- Log.d(TAG, count + ”“);
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- @Override
- protected void onResume() {
- super.onResume();
- RUN = true;
- mThread.interrupt();
- }
- @Override
- protected void onPause() {
- super.onPause();
- RUN = false;
- }
- }
package zhangphil.thread;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;public class MainActivity extends AppCompatActivity { private String TAG = "输出"; private int count = 0; private boolean RUN = true; private LongTimeWork mThread = new LongTimeWork(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mThread.start(); } private class LongTimeWork extends Thread { @Override public void run() { while (true) { try { if (!RUN) { Thread.sleep(Long.MAX_VALUE); } } catch (Exception e) { e.printStackTrace(); } count++; Log.d(TAG, count + ""); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } @Override protected void onResume() { super.onResume(); RUN = true; mThread.interrupt(); } @Override protected void onPause() { super.onPause(); RUN = false; }}
转自:http://blog.csdn.net/zhangphil/article/details/78584136
阅读全文
0 0
- Android使用Thread的interrupt与sleep,重启或暂停线程任务
- Android使用Thread的interrupt与sleep,重启或暂停线程任务
- Java线程生命周期及其使用,sleep与interrupt的使用,wait与notify
- java线程研究---(4)暂停Thread:sleep
- 线程中sleep 与interrupt方法的应用
- Thread 的sleep、wait、yield、interrupt
- Thread 的sleep、wait、yield、interrupt
- 线程 中断 Thread.interrupt()使用
- 线程 Thread 的 Interrupt 和 isInterrupted 打断线程的使用。
- Thread.interrupt()的使用
- Android AsynTask 与Thread 或线程池 使用分析
- java 线程的interrupt和sleep、wait
- VC如何对新创建的一个线程暂停或重启
- Thread interrupt() 方法的使用
- Android Thread interrupt 中断JAVA线程
- Android Thread interrupt 中断JAVA线程
- JAVA或C#中Thread.Sleep()的使用
- Thread 常搞混的几个概念sleep、wait、yield、interrupt
- Spring面向切面编程二
- 171127 总结-DCTF线下赛经验教训
- 教育为本、科技先行,锐捷网络用创新技术助力校园信息化
- Servlet的执行过程(三)
- java Gradle
- Android使用Thread的interrupt与sleep,重启或暂停线程任务
- Ajax获取Controller数据406异常问题
- Dubbo入门
- 阿里巴巴Java工作手册---学习笔记
- Ubuntu16.04LTS 下ros(kinetic)的arduino应用(一)
- android studio 引入so文件
- bootstrap------栅格系统
- bfs + 状压
- 每当我想查找一个我的博文的时候就想放弃CSDN,没有自己的搜索功能啊