在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();