Android使用Thread的interrupt与sleep,重启或暂停线程任务
程序员文章站
2023-01-29 21:27:09
android使用thread的interrupt与sleep,重启或暂停线程任务
本文给出一个例子,简单说明如何在android诸如activity中,重启或者暂停一个...
android使用thread的interrupt与sleep,重启或暂停线程任务
本文给出一个例子,简单说明如何在android诸如activity中,重启或者暂停一个正在无限运作的线程。
需求描述:假设在android的activity中,有一个线程,永不停息的运作,若当前activity处于用户可见状态时候,每隔一秒输出一个自增长的计数器值,但是当activity处于用户不可见时候,暂停线程输出,即中断线程执行。
实现这一机制的关键点简言之,借助thread的sleep,让sleep在一定条件下(比如一个状态机布尔值)休眠一个极大值long.max_value。然后在android的activity生命周期回调中,重新赋值状态机布尔值,同时使用thread的interrupt方法,打断当前处于休眠状态的线程,使之重新恢复正常运转。
代码如下:
- packagezhangphil.thread;
- importandroid.support.v7.app.appcompatactivity;
- importandroid.os.bundle;
- importandroid.util.log;
- publicclassmainactivityextendsappcompatactivity{
- privatestringtag=“输出”;
- privateintcount=0;
- privatebooleanrun=true;
- privatelongtimeworkmthread=newlongtimework();
- @override
- protectedvoidoncreate(bundlesavedinstancestate){
- super.oncreate(savedinstancestate);
- mthread.start();
- }
- privateclasslongtimeworkextendsthread{
- @override
- publicvoidrun(){
- while(true){
- try{
- if(!run){
- thread.sleep(long.max_value);
- }
- }catch(exceptione){
- e.printstacktrace();
- }
- count++;
- log.d(tag,count+”“);
- try{
- thread.sleep(1000);
- }catch(interruptedexceptione){
- e.printstacktrace();
- }
- }
- }
- }
- @override
- protectedvoidonresume(){
- super.onresume();
- run=true;
- mthread.interrupt();
- }
- @override
- protectedvoidonpause(){
- 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; } }
上一篇: 正则表达式口诀_学习正则的朋友值得一看
下一篇: Django视图和URL配置详解