Android 開(kāi)發(fā)線程的分析
Android 開(kāi)發(fā)線程的分析
今天早上把公司給的任務(wù)做完了之后,突然就有點(diǎn)無(wú)聊,于是,把以前學(xué)的那些東西翻了翻,博客看了看,就看到一個(gè)關(guān)于線程的博客,有了很大的爭(zhēng)議,我也差點(diǎn)誤解了(感覺(jué)高大上~~~)。整體代碼差不多是這樣:
package sw.angel.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打印出來(lái)
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);
//通過(guò)Handler啟動(dòng)線程
mHandler.post(mRunnable);
}
protected void onDestroy() {
//將線程銷毀掉
//mHandler.removeCallbacks(mRunnable);
super.onDestroy();
}
}
所謂的爭(zhēng)議是什么呢?看了這塊代碼的大概意思,很多人會(huì)以為每2s新開(kāi)一個(gè)線程執(zhí)行,但程序退出時(shí),線程依舊是執(zhí)行的。博主就在onDestroy()中加上了removeCallbacks()。大概意思就是移除線程(銷毀)。
當(dāng)然,首先指出的一點(diǎn)就是,這個(gè)demo是每2秒執(zhí)行一次Runable。相當(dāng)于每2秒執(zhí)行一次主線程,用logcat打印出來(lái)。而不是每2秒新開(kāi)一個(gè)線程。而無(wú)論你是否加上最后一句話,你會(huì)發(fā)現(xiàn)線程沒(méi)有停止過(guò)。相當(dāng)于,隔2秒就執(zhí)行一次,無(wú)限循環(huán)下去。
為什么還會(huì)執(zhí)行?嗯,這是個(gè)問(wèn)題。好了,我也不賣關(guān)子了。
退出的時(shí)候,程序相當(dāng)于只是 finish 掉了,如果只是簡(jiǎn)單的finish的話,該程序并沒(méi)有銷毀掉,主線程還繼續(xù)運(yùn)行的,只是被前一個(gè)activity覆蓋而已。
有人說(shuō):Android應(yīng)用本身就是一個(gè)進(jìn)程,當(dāng)我們退出應(yīng)用時(shí),這個(gè)進(jìn)程就已經(jīng)銷毀了吧?
可是并沒(méi)有…
Android的特色: 當(dāng)應(yīng)用程序退出的時(shí)候進(jìn)程資源并沒(méi)有銷毀,這樣做是為了下次啟動(dòng)這個(gè)程序的更快…我想Android的思想是達(dá)到資源利用率的最大化,但這也有弊端,如果有應(yīng)用需要系統(tǒng)資源,而系統(tǒng)資源又不夠,那么就得去銷毀掉其它資源,騰出地方來(lái)…
如果你想知道是不是真的沒(méi)有銷毀,你可以在onCreate判斷savedInstanceState是否等于NULL就可以知道是不是reinitialized了,或者在onBackPressed調(diào)用System.exit(0)真正退出進(jìn)程。
android的特色之一:并不由用戶來(lái)銷毀activity,activity 的生命周期完全交給系統(tǒng)來(lái)管理 ,等系統(tǒng)在適當(dāng)?shù)臅r(shí)候來(lái)回收資源。當(dāng)你按下backspace鍵的時(shí)候,只是簡(jiǎn)單的將位于堆棧里下一個(gè)activity彈出,將原來(lái)的activity壓棧而已,系統(tǒng)并保存原來(lái)的activity的一些歷史信息,并不銷毀,等你下次打開(kāi)的時(shí)候,能夠很快的恢復(fù)。
android的特色之二:進(jìn)程資源并沒(méi)被銷毀,Activity的主線程也是沒(méi)有退出的,因此Activity中的消息隊(duì)列會(huì)一致執(zhí)行下去,當(dāng)再此啟動(dòng)Activity的時(shí)候,又會(huì)實(shí)例化一Rrunnable,又會(huì)向此消息隊(duì)列中添加一個(gè)這個(gè)Runnable。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Android4.4下MediaProvider無(wú)法向外置SD卡中文件寫(xiě)數(shù)據(jù)的解決方法
這篇文章主要介紹了Android4.4下MediaProvider無(wú)法向外置SD卡中文件寫(xiě)數(shù)據(jù)的解決方法,實(shí)例分析了Android4.4下針對(duì)讀寫(xiě)限制的修改技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Android性能圖論在啟動(dòng)優(yōu)化中的應(yīng)用示例詳解
這篇文章主要為大家介紹了Android性能圖論在啟動(dòng)優(yōu)化中的應(yīng)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Android 使用Path實(shí)現(xiàn)涂鴉功能
到月底了最近比較空閑,今天抽空給大家實(shí)現(xiàn)一個(gè)涂鴉效果,會(huì)分幾步實(shí)現(xiàn),這里有一個(gè)重要的知識(shí)點(diǎn)就是圖層,要理解這個(gè)。下面先從簡(jiǎn)單的說(shuō)起,一起看看代碼吧2016-12-12
Android之Viewpager+Fragment實(shí)現(xiàn)懶加載示例
本篇文章主要介紹了Android之Viewpager+Fragment實(shí)現(xiàn)懶加載示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03
Android使用緩存機(jī)制實(shí)現(xiàn)文件下載及異步請(qǐng)求圖片加三級(jí)緩存
這篇文章主要介紹了Android使用緩存機(jī)制實(shí)現(xiàn)文件下載及異步請(qǐng)求圖片加三級(jí)緩存的相關(guān)資料,需要的朋友可以參考下2016-02-02
android實(shí)現(xiàn)記住用戶名和密碼以及自動(dòng)登錄
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)記住用戶名和密碼以及自動(dòng)登錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
Android百度地圖添加Marker失真問(wèn)題的解決方案
本篇文章主要介紹了Android百度地圖添加Marker失真問(wèn)題的解決方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01

