use*_*637 3 java multithreading android runnable
我有一种方法可以让 TextView 充当“正在加载...”指示器。
我正在用一个 Runnable 来做这件事,它每 0.5 秒更新一次 TextView。这是我的功能:
public void displayFlash() {
animate = true;
Handler handler = new Handler();
Runnable runnable = new Runnable() {
public void run() {
while(animate) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
public void run() {
System.out.println("Running");
numFrames++;
switch (numFrames % 3) {
case 0:
loading.setText("Loading.");
break;
case 1:
loading.setText("Loading..");
break;
case 2:
loading.setText("Loading...");
break;
}
}
});
}
}
};
new Thread(runnable).start();
}
Run Code Online (Sandbox Code Playgroud)
问题是,在此活动完成(并销毁)后,线程继续运行。我System.out.println("running");在 Runnable 中有一个,并且在此活动完成后继续记录。我需要做什么才能杀死它?我曾尝试handler.removeCallbacks(runnable);和Thread.interrupt();没有运气。
public void displayFlash() {
animate = true;
final Handler handler = new Handler();
Runnable yourRunnable = new Runnable() {
@Override
public void run() {
System.out.println("Running");
numFrames++;
switch (numFrames % 3) {
case 0:
loading.setText("Loading.");
break;
case 1:
loading.setText("Loading..");
break;
case 2:
loading.setText("Loading...");
break;
}
handler.postDelayed(this, 500);
}
}
handler.post(yourRunnable);
}
Run Code Online (Sandbox Code Playgroud)
完成后,请致电 handler.removeCallbacks(yourRunnable);