在Android應(yīng)用中,確保線程安全退出的方法如下:
創(chuàng)建一個Handler實例,將其關(guān)聯(lián)到主線程的消息隊列。在線程中執(zhí)行任務(wù)時,通過Handler發(fā)送消息到主線程。當需要安全退出線程時,主線程可以發(fā)送一個特定的消息,線程在收到該消息后執(zhí)行退出操作。
示例代碼:
private Handler mainHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case EXIT_THREAD:
// 執(zhí)行退出操作
thread.interrupt();
break;
}
}
};
// 在線程中執(zhí)行任務(wù)
while (!Thread.currentThread().isInterrupted()) {
// 執(zhí)行任務(wù)代碼
// 檢查是否需要退出線程
if (shouldExitThread) {
mainHandler.sendEmptyMessage(EXIT_THREAD);
}
}
在線程類中定義一個volatile布爾變量,用于表示線程是否應(yīng)該退出。使用wait()方法使線程等待,直到主線程調(diào)用notifyAll()方法喚醒線程。當主線程需要安全退出線程時,將布爾變量設(shè)置為true,并調(diào)用notifyAll()方法。
示例代碼:
public class MyThread extends Thread {
private volatile boolean shouldExit = false;
public void exitThread() {
shouldExit = true;
notifyAll();
}
@Override
public void run() {
while (!shouldExit) {
// 執(zhí)行任務(wù)代碼
try {
// 等待主線程通知退出
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
在主線程中,當需要安全退出線程時,調(diào)用exitThread()
方法。