Android高手進(jìn)階教程(十九)之---Android開發(fā)中,使用線程應(yīng)該注意的問題!
我們都知道Hanlder是線程與Activity通信的橋梁,我們在開發(fā)好多應(yīng)用中會用到線程,有些人處理不當(dāng),會導(dǎo)致當(dāng)程序結(jié)束時,線程并沒有被銷毀,而是一直在后臺運(yùn)行著,當(dāng)我們重新啟動應(yīng)用時,又會重新啟動一個線程,周而復(fù)始,你啟動應(yīng)用次數(shù)越多,開啟的線程數(shù)就越多,你的機(jī)器就會變得越慢。
為了方便 大家理解,我寫一個簡單的Demo.功能就是每2秒中將應(yīng)用的Title更換一次。具體步驟如下:
第一步:新建一個Android工程命名為ThreadDemo。
第二步:修改ThreadDemo.java,代碼如下:
[java]?view plaincopy 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秒執(zhí)行一次???????????????mHandler.postDelayed(mRunnable,?2000);???????????}??????????????????};???????@Override??????public?void?onCreate(Bundle?savedInstanceState)?{???????????super.onCreate(savedInstanceState);???????????setContentView(R.layout.main);????????????//通過Handler啟動線程???????????mHandler.post(mRunnable);???????}??????????}????第三步:運(yùn)行上述工程,查看運(yùn)行效果:
當(dāng)然上面不是重點(diǎn),退出應(yīng)用時,線程還在跑,打開Logcat視窗或者cmd終端查看,如下(剛吃了午餐回來,線程還在跑著):
當(dāng)我們再次啟動應(yīng)用時,會重新啟動一個新的線程,如下圖所示:
所以我們在應(yīng)用退出時,要將線程銷毀,我們只要在Activity中的,onDestory()方法處理一下就OK了,如下代碼所示:
[java]?view plaincopy @Override????protected?void?onDestroy()?{???????mHandler.removeCallbacks(mRunnable);???????super.onDestroy();?????}????所以ThreadDemo.java的完整代碼如下:
[java]?view plaincopy 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秒執(zhí)行一次???????????????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~今天就寫到這里,我午休去也~大家有不明白的可以留言!