活動的最佳實踐(Activity)

你已經(jīng)掌握了相關(guān)活動非常多的知識,不過恐怕離完全靈活運用還有一段距離。雖然知識點只有這么多,但運用的技巧卻是多種多樣的所以,這里我準備教你關(guān)于活動的最佳實踐技巧,這些技巧在你以后的工作中將會非常有用,

2.6.1 知曉當(dāng)前是哪一個活動

? ? ? ? ? ? ?這個技巧將會教你如何根據(jù)當(dāng)前的界面就能判斷出這是哪一個活動。可能不會覺得挺納悶的,我自己寫的代碼怎么會不知道哪一個活動啦?很不幸的是,在你真正進入企業(yè)以后,更有可能的是接手一份別人的代碼,因為你剛進公司就正好有一個新項目啟動的幾率并不高。閱讀別人的代碼有時是一個很頭痛的問題,就當(dāng)你需要在某個界面上修改一些非常簡單的東西時,半天找不到這個界面對應(yīng)哪一個活動。學(xué)會了本節(jié)的技巧后,這對你來說就再也不是難題了。

? ? ? ? ? 我們還是在ActivityTest項目的基礎(chǔ)上修改,首先需要新建一個BaseAcyivity類。

注意這里是BaseActivity和普通活動創(chuàng)建方式并不一樣,因為我們不需要讓BaseActivity在AndroidManifest.xml中注冊,所以選擇創(chuàng)建一個普通的java類就可以了。然后讓BaseActivity繼承自AppCompatActivity,并重寫onCreat()方法,如下所示:

我們在oncreat()方法中獲取了當(dāng)前實例的類名,并通過Log打印出來。

接下來我們需要讓BaseActivity成為ActivityTest項目中所有活動的父類。讓其他的活動不在繼承AppCompatActivity,而繼承自BaseActivity。而由于BaseActivity有繼承自AppCompatActivity,所以項目中所有活動的現(xiàn)有功能并不會受影響,他們?nèi)匀煌耆^承Activity中所有特性。

所以當(dāng)進入不同的Activity時,都會打印出當(dāng)前activity的名稱。

現(xiàn)在當(dāng)我們進入到一個活動界面,該活動的類名就會被打印出來,這樣我們就可以時時刻刻知曉當(dāng)前界面對應(yīng)的是哪一個活動了。

2.6.2 ?隨時隨地的退出程序

如果目前你的手機界面還停留在ThirdActivity,你會發(fā)現(xiàn)當(dāng)前想退出程序非常的不方便,需要連續(xù)3次Back鍵才行。按Home鍵只是把程序掛起,并沒有退出程序。其實這個問題就是以引出你的思考,如果我們的程序需要一個注銷或者退出的功能怎么辦啦?必須要有一個隨時隨地的能退出程序的方案才行。

其實解決思路也很簡單,只需要有一個專門的集合類對所有的活動進行管理就可以了,下面我們就來實現(xiàn)一下。

新建一個ActivityCollector類作為活動的管理器,代碼如下:


在活動管理器中,我們通過一個List來暫存活動,然后提供了一個addActivity()方法用于向List中添加一個活動,提供了一個removeActivity方法用于從List中移除活動,最后提供了一個finish()方法用于將List中存儲的活動全部銷毀調(diào)。

接下來修改BaseActivity中的代碼,如下所示:

? ? ? ? ?在BaseActivity的onCreat()方法中調(diào)用ActivityCollector的addActivity()方法,表明將當(dāng)前正在創(chuàng)建的活動添加到活動管理器里,然后在BaseActivity()中重寫onDestroy()方法,并調(diào)用ActivityCollectroy的removeActivity()方法,表明講一個馬上要銷毀的活動從管理器中移除。

? ? ? ? ?從此以后,不管你現(xiàn)在什么地方退出程序,只需要調(diào)用ActivityCollectroy。finishAll()方法就可以了。例如在ThirdActivity界面想通過點擊按鈕直接退出程序,只需要將代碼改成如下


2.6.3 啟動活動的最佳寫法

啟動活動的方法相信你已經(jīng)非常熟悉了,首先通過Intent構(gòu)建出當(dāng)前的“意圖”,然后調(diào)用startActivity()或startActivityForResult()方法將活動啟動以來,如果有數(shù)據(jù)需要從一個活動傳遞到另一個活動,也可以借助Intent()來完成。

假設(shè)SecondActivity中需要用到兩個非常重要的字符串參數(shù),在啟動SecondActivity的時候必須傳遞過來,那么我們很容易會寫出如下代碼:

I

這樣寫是完全正確的,不管是從語法上還是規(guī)范上,只是在真正的項目中經(jīng)常會有對接的問題。比如SecondActivity并不是由你開發(fā)的,但是現(xiàn)在你負責(zé)的部分需要有啟動SecondActivity這個功能,而你卻不清楚啟動這個活動需要傳遞那些數(shù)據(jù)。這時無非就有兩種辦法,一個是你自己趣閱讀SecondActivity中的代碼,二是詢問負責(zé)編寫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)成一個良好的習(xí)慣,格尼編寫的每個活動都添加類似的啟動方法,這樣不僅可以讓啟動活動變得非常簡單,還可以節(jié)省不少你同事的時間。

2.7 ?小節(jié)與點評

? ? ? ? ? ? ?真是感覺好疲憊呀!沒錯學(xué)習(xí)了這么多的東西不疲憊才怪。但是你內(nèi)心那種掌握了知識的喜悅感相信也無法掩蓋。本章的收貨非正常的多。不管是理論型還是實踐型的東西都涉及很多,從活動的基本用法,到啟動活動和傳遞數(shù)據(jù)方式,再到活動的生命周期,以及活動的啟動模式,你幾乎已經(jīng)學(xué)會了關(guān)于活動的所有重要的知識點。另外在本章的最后,還學(xué)習(xí)了幾種可以應(yīng)用在活動中的最佳技巧,好不夸張的說,你在android活動方面已經(jīng)算是一個小高手了。

? ? ? ? ? ? ?不過你的Android旅途才剛剛開始啦,后面需要學(xué)習(xí)的東西還很多,也許會比現(xiàn)在累,一定要做好心理準備??傮w來說,我給你現(xiàn)在狀態(tài)的打滿分,畢竟你已經(jīng)學(xué)會了那么多東西,也是時候放松一下了。自己適當(dāng)控制一下休息事件,然后我們繼續(xù)前進吧!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容