Android制御スレッドの一時停止とリカバリ
Androidではこのような問題に遭遇することがあります.グラフを描きますが、一時停止して続けたいと思っています.まず、図面を描くにはマルチスレッドの知識が必要です.JAvaのThreadクラスにはsuspendとresumeの2つの方法が付いていてスレッドの一時停止と回復を実現していますが、残念なことに、今はもう使用を提案されていません.そして、あなたが使っても卵用はありません.まったく効果がありません.ハハ(これは気まずいです!)
ネット上で多くの資料を調べて(ここでネット上のいくつかのブログの指導に感謝しました)、修正を経て、ハッ、絶対に使うことができることを保証します.くだらないことは多く言わないで、先にコードを貼ります:
上記のコードに示すように、スレッドの待機と実行の継続を実現するためにロックオブジェクトを使用します.ここではmyThreadを使用することに注意してください.wait()はだめです.信じないでやってみてください.またonPause()メソッドはrunメソッドでしか実行できないに違いありません.そうしないと、メインスレッドを待たせることになります.
どうやって起動しますか?これは簡単でしょう.他のクラスで実行します.
一時停止する場合は、次の操作を行います.
リカバリスレッドの実行:
ネット上で多くの資料を調べて(ここでネット上のいくつかのブログの指導に感謝しました)、修正を経て、ハッ、絶対に使うことができることを保証します.くだらないことは多く言わないで、先にコードを貼ります:
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();