在Android開發中,經常會用到線程和Timer,如果沒有主動關閉它們,當程序結束時,線程並沒有被銷毀,而是一直在後台運行著,當我們重新啟動應用時,又會重新啟動一個線程,周而復始,你啟動應用次數越多,開啟的線程數就越多,你的機器就會變得越慢。還會導致意思不到的錯誤。
1、線程的銷毀
Hanlder是線程與Activity通信的橋梁,利用handler接收到任務線程,放到任務隊列裡面派對執行。
//調用該任務線程的run() 方法執行任務線程。
Handler updateBarHandler =new handler();
handler.post(Runnable Thread);
//移除handler裡的任務線程,調用線程的stop()方法,銷毀線程。
handler.removecallbacks(Runnable Thread);
一個簡單的例子如下:
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
public class HandlerThread extends Activity {
private static final String TAG = "HandlerThread";
private Handler mHandler = new Handler();
private Runnable mRunnable = new Runnable() {
public void run() {
//為了方便 查看,我們用Log打印出來
Log.e(TAG, Thread.currentThread().getName() + "Thread run");
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//通過Handler啟動線程
mHandler.post(mRunnable);
}
@Override
protected void onDestroy() {
//將線程銷毀掉
mHandler.removeCallbacks(mRunnable);
super.onDestroy();
}
}
2、Timer的銷毀
默認情況下,只要一個程序的timer線程在運行,那麼這個程序就會保持運行。當然,你可以通過以下四種方法終止一個timer線程:
a)調用timer的cancle方法。你可以從程序的任何地方調用此方法,甚至在一個timer task的run方法裡;
b)讓timer線程成為一個daemon線程(可以在創建timer時使用new Timer(true)達到這個目地),這樣當程序只有daemon線程的時候,它就會自動終止運行;
c)當timer相關的所有task執行完畢以後,刪除所有此timer對象的引用(置成null),這樣timer線程也會終止;
d)調用System.exit方法,使整個程序(所有線程)終止。