達內-關於Android 線程的銷毀

在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方法,使整個程序(所有線程)終止。

//————————————————————————————-

終止線程運行,一般都是設定一個bool變量,在線程run方法內部判斷該變量的值,以便隨時結束線程的run()運行並退出。該bool值的改變,是在線程外部來操作的.

這到是個好辦法,但是我有多瞭線程,外部的一個bool變量改變瞭,所有的線程都變瞭,這樣還是不能控制某一個線程呀搞個數組或list,對應存儲每個線程的bool值
采用瞭類似於的辦法,用數據庫來控制的
//————————————————————————————

線程像這樣: Thread{ boolean flag = fase; run(){ while(!flag){ } } } Thread t = new Thread(); t.start(); —————————————————– 要終止循環,隻需要這樣 t.flag=true; ================================================ 還有一種方式 線程像這樣: Thread{ run(){ while(true){ Thread.sleep(xxxx); } } } Thread t = new Thread(); t.start(); ——————————————– 要終止循環,隻需要這樣 //—————————————————————————– 

作者 sdtarena

發佈留言