Android 控制執行緒的開始關閉
阿新 • • 發佈:2019-02-07
在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();