1. 程式人生 > >Android中java執行緒的暫停與恢復

Android中java執行緒的暫停與恢復

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