歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android 線程和Timer的銷毀

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

Copyright © Linux教程網 All Rights Reserved