在锁定/解锁设备时,我找不到任何停止/恢复线程的工作解决方案,任何人都可以提供帮助,或者告诉我在哪里可以找到该怎么做?我需要在手机锁定时停止线程,并在手机解锁时再次启动它。
答案 0 :(得分:10)
Java在一个用于停止线程的协作中断模型上运行。这意味着你不能在没有线程本身合作的情况下简单地停止线程执行。如果要停止线程,客户端可以调用Thread.interrupt()方法来请求线程停止:
public class SomeBackgroundProcess implements Runnable {
Thread backgroundThread;
public void start() {
if( backgroundThread == null ) {
backgroundThread = new Thread( this );
backgroundThread.start();
}
}
public void stop() {
if( backgroundThread != null ) {
backgroundThread.interrupt();
}
}
public void run() {
try {
Log.i("Thread starting.");
while( !backgroundThread.interrupted() ) {
doSomething();
}
Log.i("Thread stopping.");
} catch( InterruptedException ex ) {
// important you respond to the InterruptedException and stop processing
// when its thrown! Notice this is outside the while loop.
Log.i("Thread shutting down as it was requested to stop.");
} finally {
backgroundThread = null;
}
}
线程的重要部分是您不会吞下InterruptedException而是停止线程的循环和关闭,因为如果客户端请求线程自身中断,您只会得到此异常。
所以你只需要将SomeBackgroundProcess.start()挂钩到事件解锁,并将SomeBackgroundProcess.stop()挂钩到锁定事件。