你已經(jīng)掌握了相關(guān)活動非常多的知識,不過恐怕離完全靈活運用還有一段距離。雖然知識點只有這么多,但運用的技巧卻是多種多樣的所以扁眯,這里我準備教你關(guān)于活動的最佳實踐技巧,這些技巧在你以后的工作中將會非常有用翅帜,
2.6.1 知曉當前是哪一個活動
? ? ? ? ? ? ?這個技巧將會教你如何根據(jù)當前的界面就能判斷出這是哪一個活動姻檀。可能不會覺得挺納悶的涝滴,我自己寫的代碼怎么會不知道哪一個活動啦绣版?很不幸的是,在你真正進入企業(yè)以后歼疮,更有可能的是接手一份別人的代碼杂抽,因為你剛進公司就正好有一個新項目啟動的幾率并不高。閱讀別人的代碼有時是一個很頭痛的問題韩脏,就當你需要在某個界面上修改一些非常簡單的東西時缩麸,半天找不到這個界面對應(yīng)哪一個活動。學會了本節(jié)的技巧后赡矢,這對你來說就再也不是難題了杭朱。
? ? ? ? ? 我們還是在ActivityTest項目的基礎(chǔ)上修改,首先需要新建一個BaseAcyivity類吹散。
注意這里是BaseActivity和普通活動創(chuàng)建方式并不一樣弧械,因為我們不需要讓BaseActivity在AndroidManifest.xml中注冊,所以選擇創(chuàng)建一個普通的java類就可以了空民。然后讓BaseActivity繼承自AppCompatActivity刃唐,并重寫onCreat()方法,如下所示:
我們在oncreat()方法中獲取了當前實例的類名,并通過Log打印出來唁桩。
接下來我們需要讓BaseActivity成為ActivityTest項目中所有活動的父類闭树。讓其他的活動不在繼承AppCompatActivity耸棒,而繼承自BaseActivity荒澡。而由于BaseActivity有繼承自AppCompatActivity,所以項目中所有活動的現(xiàn)有功能并不會受影響与殃,他們?nèi)匀煌耆^承Activity中所有特性单山。
所以當進入不同的Activity時,都會打印出當前activity的名稱幅疼。
現(xiàn)在當我們進入到一個活動界面米奸,該活動的類名就會被打印出來,這樣我們就可以時時刻刻知曉當前界面對應(yīng)的是哪一個活動了爽篷。
2.6.2 ?隨時隨地的退出程序
如果目前你的手機界面還停留在ThirdActivity悴晰,你會發(fā)現(xiàn)當前想退出程序非常的不方便,需要連續(xù)3次Back鍵才行逐工。按Home鍵只是把程序掛起铡溪,并沒有退出程序。其實這個問題就是以引出你的思考泪喊,如果我們的程序需要一個注銷或者退出的功能怎么辦啦棕硫?必須要有一個隨時隨地的能退出程序的方案才行。
其實解決思路也很簡單袒啼,只需要有一個專門的集合類對所有的活動進行管理就可以了哈扮,下面我們就來實現(xiàn)一下。
新建一個ActivityCollector類作為活動的管理器蚓再,代碼如下:
在活動管理器中滑肉,我們通過一個List來暫存活動,然后提供了一個addActivity()方法用于向List中添加一個活動摘仅,提供了一個removeActivity方法用于從List中移除活動靶庙,最后提供了一個finish()方法用于將List中存儲的活動全部銷毀調(diào)。
接下來修改BaseActivity中的代碼实檀,如下所示:
? ? ? ? ?在BaseActivity的onCreat()方法中調(diào)用ActivityCollector的addActivity()方法惶洲,表明將當前正在創(chuàng)建的活動添加到活動管理器里,然后在BaseActivity()中重寫onDestroy()方法膳犹,并調(diào)用ActivityCollectroy的removeActivity()方法恬吕,表明講一個馬上要銷毀的活動從管理器中移除。
? ? ? ? ?從此以后须床,不管你現(xiàn)在什么地方退出程序铐料,只需要調(diào)用ActivityCollectroy。finishAll()方法就可以了。例如在ThirdActivity界面想通過點擊按鈕直接退出程序钠惩,只需要將代碼改成如下
2.6.3 啟動活動的最佳寫法
啟動活動的方法相信你已經(jīng)非常熟悉了柒凉,首先通過Intent構(gòu)建出當前的“意圖”,然后調(diào)用startActivity()或startActivityForResult()方法將活動啟動以來篓跛,如果有數(shù)據(jù)需要從一個活動傳遞到另一個活動膝捞,也可以借助Intent()來完成。
假設(shè)SecondActivity中需要用到兩個非常重要的字符串參數(shù)愧沟,在啟動SecondActivity的時候必須傳遞過來蔬咬,那么我們很容易會寫出如下代碼:
I
這樣寫是完全正確的,不管是從語法上還是規(guī)范上沐寺,只是在真正的項目中經(jīng)常會有對接的問題林艘。比如SecondActivity并不是由你開發(fā)的,但是現(xiàn)在你負責的部分需要有啟動SecondActivity這個功能混坞,而你卻不清楚啟動這個活動需要傳遞那些數(shù)據(jù)狐援。這時無非就有兩種辦法,一個是你自己趣閱讀SecondActivity中的代碼究孕,二是詢問負責編寫SecondActivity中的同事啥酱,會不會覺得很麻煩?其實只需要換一種寫法蚊俺,就可以輕松解決掉上面的窘境懈涛。
修改SecondActivity中的代碼,如下圖所示:
? ? ? ? ?我們在SecondActivity中添加了一個actionStart()方法泳猬,在這個方法中完成了Intent的構(gòu)建批钠,另外所有SecondACtivity中需要的數(shù)據(jù)都是通過actionStart()方法的參數(shù)傳遞過來,然后把他們存·儲到Intent中得封,最后調(diào)用startActivity埋心。
? ? ? ? ? 這樣寫的好處在哪兒里?最重要的一點就是一目了然忙上,SecondActivity所需要的數(shù)據(jù)在方法參數(shù)中全部體現(xiàn)出來了拷呆,這樣即使不用認真閱讀SecondActivity需要傳遞那些數(shù)據(jù)。另外疫粥,這樣寫還簡化了啟動活動的代碼茬斧,現(xiàn)在只需要一行代碼就可以啟動了SecondActivity(),如下所示:
養(yǎng)成一個良好的習慣梗逮,格尼編寫的每個活動都添加類似的啟動方法项秉,這樣不僅可以讓啟動活動變得非常簡單,還可以節(jié)省不少你同事的時間慷彤。
2.7 ?小節(jié)與點評
? ? ? ? ? ? ?真是感覺好疲憊呀娄蔼!沒錯學習了這么多的東西不疲憊才怪怖喻。但是你內(nèi)心那種掌握了知識的喜悅感相信也無法掩蓋。本章的收貨非正常的多岁诉。不管是理論型還是實踐型的東西都涉及很多锚沸,從活動的基本用法,到啟動活動和傳遞數(shù)據(jù)方式涕癣,再到活動的生命周期哗蜈,以及活動的啟動模式,你幾乎已經(jīng)學會了關(guān)于活動的所有重要的知識點属划。另外在本章的最后恬叹,還學習了幾種可以應(yīng)用在活動中的最佳技巧候生,好不夸張的說同眯,你在android活動方面已經(jīng)算是一個小高手了。
? ? ? ? ? ? ?不過你的Android旅途才剛剛開始啦唯鸭,后面需要學習的東西還很多须蜗,也許會比現(xiàn)在累,一定要做好心理準備目溉∶靼梗總體來說,我給你現(xiàn)在狀態(tài)的打滿分缭付,畢竟你已經(jīng)學會了那么多東西柿估,也是時候放松一下了。自己適當控制一下休息事件陷猫,然后我們繼續(xù)前進吧秫舌!