androidスレッドstart()、interrupt()の繰り返し使用
今回私が直面した問題は、1つのスレッドを100 msおきにscrollviewスライド高さをリスニングしたいことです.start()後スレッドrun、30回リスニングしてスレッドを停止し、interrupt()メソッドを呼び出してスレッドを中断し、再スライド時にstart()スレッドを継続し、30回後にinterrupt()を継続します.問題は、ユーザーが連続的にスライドすると、複数のスレッドが開き、スレッドクラスでオブジェクトを初期化し、そのオブジェクトstart()、interrupt()これにより、1つのスレッドオブジェクトのみが中断され、以前のオブジェクトがスレッドを実行し続けたことになります.私の解決策は次のとおりです.
オブジェクトを初期化せずに直接new MyThread().start();そしてMyThread()クラスのrun()で30回実行した場合、Thread.currentThread().interrupt();現在このクラスが実行しているスレッドを中断すると、このクラスのオブジェクトが中断されずに実行を続けることはなく、私の問題を解決します.
部分コード:
オブジェクトを初期化せずに直接new MyThread().start();そしてMyThread()クラスのrun()で30回実行した場合、Thread.currentThread().interrupt();現在このクラスが実行しているスレッドを中断すると、このクラスのオブジェクトが中断されずに実行を続けることはなく、私の問題を解決します.
部分コード:
public class MyThread extends Thread{
int y=9999;
@Override
public void run() {
super.run();
while(!Thread.currentThread().isInterrupted()){//!Thread.currentThread().isInterrupted()//!thread.isInterrupted()
if(y!=sc2.getScrollY()){
y=sc2.getScrollY();
}else{
Message msg=new Message();
msg.what=9;
mHandler.sendMessage(msg);
}
Log.v("sc2.getScrollY()!!!!!!!", "sc2.getScrollY():"+sc2.getScrollY());
if(sc2.getScrollY()==dpi*18*45){// 3 (0,0)
Message msg=new Message();
msg.what=8;
mHandler.sendMessage(msg);
}
try {
if(iflg<30){
Thread.sleep(100);
iflg=iflg+1;
}
if(iflg==30){
Thread.currentThread().interrupt();
// thread=null;
iflg=0;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}