あなたの目標は、スレッドを から中断することonPause
です。それにはいくつかの方法がありますが、基本的には、reloadMissingFiles
.
オプション1
あなたがしたようにブール値フラグを使うことができます -volatile
変更がスレッド間で確実に見えるように宣言する必要があります:
private volatile boolean activityStopped = false;
public void reloadMissingFiles() {
while (!activityStopped) {
//load small chunks so that the activityStopped flag is checked regularly
}
}
public Thread rlMF = new Thread(new Runnable() {
public void run() {
reloadMissingFiles(); //will exit soon after activityStopped has been set to false
}
});
protected void onPause() {
//This will stop the thread fairly soon if the while loop in
//reloadMissingFiles is fast enough
activityStopped = true;
super.onPause();
}
オプション 2 (より良いアプローチ)
あなたが で何をしているのかはわかりませんがreloadMissingFiles
、それはある種の I/O 操作であり、通常は割り込み可能であると思います。次に、InterruptedException がキャッチされるとすぐに停止する中断ポリシーを設定できます。
public void reloadMissingFiles() {
try {
//use I/O methods that can be interrupted
} catch (InterruptedException e) {
//cleanup specific stuff (for example undo the operation you started
//if you don't have time to complete it
//then let the finally block clean the mess
} finally {
//cleanup (close the files, database connection or whatever needs to be cleaned
}
}
public Thread rlMF = new Thread(new Runnable() {
public void run() {
reloadMissingFiles(); //will exit when interrupted
}
});
protected void onPause() {
runner.interrupt(); //sends an interruption signal to the I/O operations
super.onPause();
}
注:この記事を読んで、より詳細なバージョンを確認することもできます。