最近在工作中遇到的一个问题。
一个线程,在按键单击是开始启动,里面的逻辑是一个While(flog == true){ } 的无线循环,当我触发另外一个按键时,改变标志位,结束这个线程和循环,看起来好像很简单的功能,却困扰我很久。然后再查了很多资料和多次尝试后,终于完成了。
思路是这个的,设置一个标志位 Flog,线程开始时为true, 当你需要结束线程的时候,把Flog给为false,使用Thread.interrupt();中止线程。
附上源码:这是一个触摸事件(按下开始线程,抬起结束线程)
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
flog = true;
mythread = new MyThread();
newMyThread.start();
break;
case MotionEvent.ACTION_UP:
StopMyThread();
break;
}
return false;
}
//MyThread线程
public class RockerViewThread extends Thread{
@Override
public void run() {
while(!flog && !isInterrupted()){
try {
// Log.e("Log_flog", "IN MyThread" );
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//结束MyThread线程
public synchronized voidStopMyThread(){
try{
notify();
flog = false;
mythread.interrupt();
}catch(Exception e){
e.printStackTrace();
}
}