您的位置:首页 > 移动开发 > Android开发

Android中java线程的暂停与恢复

2017-03-09 16:35 344 查看
在Android中有时我们会遇到类似这样的问题,我要绘制一个曲线图,但是我想让它可以被暂停和继续。首先,绘图肯定得用到多线程的知识。java的Thread类中自带suspend和resume两个方法来实现线程的暂停和恢复,可惜的是,现在已经不被建议使用了,而且,就算你用了,也没什么卵用,根本没效果,哈哈(这就很尴尬了!)

网上查了不少资料(在这里感谢网上一些博客的指导了),经过修改,哈,保证绝对可以用。废话不多说,先贴代码:

private class MyThread extends Thread {
private final Object lock = new Object();
private boolean pause = false;

/**
* 调用这个方法实现暂停线程
*/
void pauseThread() {
pause = true;
}

/**
* 调用这个方法实现恢复线程的运行
*/
void resumeThread() {
pause = false;
synchronized (lock) {
lock.notifyAll();
}
}

/**
* 注意:这个方法只能在run方法里调用,不然会阻塞主线程,导致页面无响应
*/
void onPause() {
synchronized (lock) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

@Override
public void run() {
super.run();
try {
int index = 0;
while (true) {
// 让线程处于暂停等待状态
while (pause) {
onPause();
}
try {
System.out.println(index);
Thread.sleep(50);
++index;
} catch (InterruptedException e) {
//捕获到异常之后,执行break跳出循环
break;
}
}
} catch (NullPointerException e) {
e.printStackTrace();
}
}
}


如上代码所示,我们使用一个锁对象来实现线程的等待和继续运行,这里需要注意,使用myThread.wait()是不行的,不信可试试。还有就是onPause()方法一定只能在run方法里面执行,不然就变成让主线程等待了。

怎么启动?这个应该很简单吧,我们在别的类中执行:

MyThread my = new MyThread();
Thread thread = new Thread(my);
thread.start();


暂停的话,只需执行:

pauseThread();


恢复线程运行:

resumeThread();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 线程 java