我們都知道Hanlder是線程與Activity通信的橋梁,我們在開發好多應用中會用到線程,有些人處理不當,會導致當程序結束時,線程并沒有被銷毀,而是一直在后臺運行著,當我們重新啟動應用時,又會重新啟動一個線程,周而復始,你啟動應用次數越多,開啟的線程數就越多,你的機器就會變得越慢。
為了方便 大家理解,我寫一個簡單的Demo.功能就是每2秒中將應用的Title更換一次。具體步驟如下:
第一步:新建一個Android工程命名為ThreadDemo。
第二步:修改ThreadDemo.java,代碼如下:
~~~
package com.tutor.thread;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.util.Log;public class ThreadDemo extends Activity { private static final String TAG = "ThreadDemo"; private int count = 0; private Handler mHandler = new Handler(); private Runnable mRunnable = new Runnable() { public void run() { //為了方便 查看,我們用Log打印出來 Log.e(TAG, Thread.currentThread().getName() + " " +count); count++; setTitle("" +count); //每2秒執行一次 mHandler.postDelayed(mRunnable, 2000); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //通過Handler啟動線程 mHandler.post(mRunnable); } }
~~~
第三步:運行上述工程,查看運行效果:

?
當然上面不是重點,退出應用時,線程還在跑,打開Logcat視窗或者cmd終端查看,如下(剛吃了午餐回來,線程還在跑著):

?
當我們再次啟動應用時,會重新啟動一個新的線程,如下圖所示:

?
所以我們在應用退出時,要將線程銷毀,我們只要在Activity中的,onDestory()方法處理一下就OK了,如下代碼所示:
~~~
@Override protected void onDestroy() { mHandler.removeCallbacks(mRunnable); super.onDestroy(); }
~~~
?
所以ThreadDemo.java的完整代碼如下:
~~~
package com.tutor.thread;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.util.Log;public class ThreadDemo extends Activity { private static final String TAG = "ThreadDemo"; private int count = 0; private Handler mHandler = new Handler(); private Runnable mRunnable = new Runnable() { public void run() { //為了方便 查看,我們用Log打印出來 Log.e(TAG, Thread.currentThread().getName() + " " +count); count++; setTitle("" +count); //每2秒執行一次 mHandler.postDelayed(mRunnable, 2000); } }; @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(); }}
~~~
?
Ok~今天就寫到這里,我午休去也~大家有不明白的可以留言!
- 前言
- (一)Android常用名令集錦(圖文并茂)!
- (二)Android Launcher抽屜類SlidingDrawer的使用!
- (三)Android 中自定義View的應用.
- (四)Android 中自定義屬性(attr.xml,TypedArray)的使用!
- (五)Android 中LayoutInflater的使用!
- (六)Android 中MenuInflater的使用(布局定義菜單)!
- (七)Android 中Preferences的使用!
- (八)Android Widget開發案例(世界杯倒計時!)
- (九)Android Handler的使用!!!
- (十)Android PopupWindow的使用!!!
- (十一)Android 通用獲取Ip的方法(判斷手機是否聯網的方法)!!!
- (十二)Android 在一個應用中如何啟動另外一個已安裝的應用!!!
- (十三)Android 數據庫SQLiteDatabase的使用!!
- (十四)Android Location的使用!!
- (十五)通過Location獲取Address的使用!
- (十六)Android中萬能的BaseAdapter(Spinner,ListView,GridView)的使用!
- Android 中的拿來主義(編譯,反編譯,AXMLPrinter2,smali,baksmali)!
- (十七)Android中Intent傳遞對象的兩種方法(Serializable,Parcelable)!
- (十八)列出Android設備中所有啟動的服務,及判斷某個服務是否開啟!
- (十九)Android開發中,使用線程應該注意的問題!
- (二十)Android與JavaScript方法相互調用!
- (二十一)Android中創建與幾種解析xml的方法!
- (二十二)Android中幾種圖像特效處理的集錦!!
- (二十三)Android中的日歷讀寫操作!!!
- (二十四)Android WebView的緩存!!!
- (二十五)Android 中的AIDL!!!