在 activity 完成后停止 Handler Runnable
Stopping a Handler Runnable after activity finishes
我有一个方法可以让 TextView 充当 "loading..." 指示器。
我正在使用每 .5 秒更新一次 TextView 的 Runnable 来执行此操作。这是我的功能:
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();
}
问题是,在 activity 完成(并销毁)后,线程继续 运行。我在 Runnable 中有一个 System.out.println("running");
并且在 activity 完成后继续记录。我需要做什么才能杀死它?我试过 handler.removeCallbacks(runnable);
和 Thread.interrupt();
都没有成功。
如何使用 AsyncTask?它是一个与 activity 绑定的 class,可以让您覆盖 4 个方法,一个执行后台作业,另外 3 个直接与 activity 通信。据我所知,它会在 Activity 被关闭后自动停止工作,但是,如果我对此非常错误,您可以随时调用 AsyncTask.cancel() 方法在 [=13] 中停止它=]() 方法。这不是传统的解决方案,因为 AsyncTask 通常用于短任务,但可以工作。如果您认为 class 可以破解,请参阅 Android 开发人员文档。
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);
}
完成后,请致电 handler.removeCallbacks(yourRunnable);
我有一个方法可以让 TextView 充当 "loading..." 指示器。
我正在使用每 .5 秒更新一次 TextView 的 Runnable 来执行此操作。这是我的功能:
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();
}
问题是,在 activity 完成(并销毁)后,线程继续 运行。我在 Runnable 中有一个 System.out.println("running");
并且在 activity 完成后继续记录。我需要做什么才能杀死它?我试过 handler.removeCallbacks(runnable);
和 Thread.interrupt();
都没有成功。
如何使用 AsyncTask?它是一个与 activity 绑定的 class,可以让您覆盖 4 个方法,一个执行后台作业,另外 3 个直接与 activity 通信。据我所知,它会在 Activity 被关闭后自动停止工作,但是,如果我对此非常错误,您可以随时调用 AsyncTask.cancel() 方法在 [=13] 中停止它=]() 方法。这不是传统的解决方案,因为 AsyncTask 通常用于短任务,但可以工作。如果您认为 class 可以破解,请参阅 Android 开发人员文档。
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);
}
完成后,请致电 handler.removeCallbacks(yourRunnable);