在android開發(fā)中许师,我們已經(jīng)了解了Android活動的新建肉渴,布局和控件的使用以及活動的跳轉(zhuǎn)公荧、數(shù)據(jù)傳遞等內(nèi)容。
沿著此前的軌跡同规,這一章節(jié)循狰,我們將在此基礎(chǔ)上更上一層樓窟社,加入幾種靈活運用活動的實踐技巧⌒髟浚可以預(yù)料灿里,這些技巧在實際的開發(fā)工作中將會非常受用。
一昧识、知曉當(dāng)前在哪一個活動
通過這一技巧钠四,無論活動設(shè)置的多么復(fù)雜,僅根據(jù)程序當(dāng)前的界面我們就能判斷出這是哪一個活動跪楞。
如果還沒參加工作缀去,你可能會覺得納悶,我自己寫的代碼咋還會不知道這是哪個活動甸祭?而當(dāng)實際工作進(jìn)入企業(yè)缕碎,我們更有可能接手了一份別人的代碼。畢竟剛進(jìn)公司正好有一個新項目啟動的概率并不高池户。
這時我們就需要閱讀別人的代碼咏雌。一旦需要在某個界面修改一些哪怕非常簡單的東西,卻會半天找不到這個界面到底對應(yīng)著哪個活動校焦。不用擔(dān)心赊抖,我們馬上就來學(xué)習(xí)活動的第一個技巧。
隨意打開一個項目(要能正常運行)寨典,新建一個活動BaseActivity繼承自Activity氛雪;接著在BaseActivity中重寫onCreate()方法,如圖所示:
這個活動類非常簡單耸成。我們只做了一件事:在它的onCreate()方法中獲取當(dāng)前實例的類名报亩,并通過Log打印出來。接著我們只要讓其他所有原本繼承自Activity的活動井氢,改為繼承BaseActivity即可弦追。
例如一個火車票查詢實例,運行這個程序?qū)⑦M(jìn)入到MainActivity界面花竞,點擊按鈕劲件,跳轉(zhuǎn)至更改屬性的SecondActivity活動界面。
這時我們觀察LogCat中的打印信息:
繼續(xù)深入開發(fā)约急,無論有多少個活動零远,無論跳轉(zhuǎn)到哪個界面,該活動的類名就會被打印出來一目了然烤宙。這樣我們時刻能知曉當(dāng)前界面對應(yīng)的是哪一個活動了遍烦。
二、隨時隨地退出程序
如果目前我們的手機界面還停留在SecondActivity躺枕,想要退出這個程序需要連按兩次Back鍵服猪,如果跳轉(zhuǎn)了多個活動則不得不按多次Back鍵退出供填。至于Home鍵,它只是把程序高高掛起罢猪,并沒有退出程序近她。
問題來了:如果我們的程序需要一個注銷或退出的功能該怎么辦呢?
好在解決思路并不復(fù)雜膳帕,只需要一個專門的集合類對所有的活動進(jìn)行管理就ok了粘捎。下面我們來實現(xiàn)第二個技巧。
以上一實例為例危彩,新建一個ActivityCollector類作為活動管理器攒磨,代碼如下:
在活動管理器中,我們通過一個List暫存活動汤徽,然后提供了一個addActivity()方法向List中添加一個活動娩缰,提供了一個removeActivity()方法從List中移除活動。最后提供了一個finishAll()方法將List中存儲的活動全部銷毀谒府。
接下來修改BaseActivity中的代碼拼坎,如下:
在BaseActivity的onCreate()方法中調(diào)用了ActivityCollector的addActivity()方法,表明將當(dāng)前正在創(chuàng)建的活動添加到活動管理器中完疫。然后在BaseActivity中重寫onDestroy()方法泰鸡,并調(diào)用ActivityCollector的removeActivity()方法,表明將一個馬上要銷毀的活動從活動管理器中移除壳鹤。
今后盛龄,無論我們期望在什么地方退出程序,只需要調(diào)用ActivityCollector.finishAll()方法就能實現(xiàn)器虾。
三讯嫂、啟動活動的最佳寫法
啟動活動的方法我們已經(jīng)非常熟悉了蹦锋,首先通過Intent構(gòu)建出當(dāng)前“意圖”兆沙,然后調(diào)用startActivity()或startActivityForResult()方法將活動啟動。若有數(shù)據(jù)需要從一個活動傳遞到另一個活動莉掂,也可以借助Intent來完成葛圃。
現(xiàn)在假設(shè)SecondActivity中需要用到兩個非常重要的字符串參數(shù),在啟動SecondActivity時必須要傳遞過來憎妙,那么我們輕而易舉的會寫出這樣的代碼:
這樣寫從語法和規(guī)范上說,都是正確的厘唾,不過在真正的項目開發(fā)中恐怕經(jīng)常出現(xiàn)對接的問題褥符。
因為SecondActivity很可能不是自己開發(fā)的,而現(xiàn)在負(fù)責(zé)的部分需要有啟動SecondActivity這個功能抚垃,我們卻不清楚啟動這個活動需要傳遞哪些數(shù)據(jù)喷楣。
通過自己詳細(xì)閱讀SecondActivity趟大,或詢問開發(fā)的同事可以解決這一問題。但其實只要換一種寫法就能避免這些麻煩事兒铣焊。
針對這一問題逊朽,修改SecondActivity中的代碼:
我們在SecondActivity中添加了一個actionStart()方法,在這個方法中完成了Intent構(gòu)建曲伊;而且所有SecondActivity中需要的數(shù)據(jù)都是通過actionStart()方法的參數(shù)傳遞過來的叽讳,然后把它們存儲到Intent中,最后調(diào)用startActivity()方法啟動SecondActivity坟募。
這樣寫的好處在于一目了然:我們非常清晰地知道啟動SecondActivity需要傳遞哪些參數(shù)岛蚤。同時還簡化了啟動活動的代碼,現(xiàn)在啟動SecondActivity只需要一行代碼搞定:
如果我們養(yǎng)成良好的編程習(xí)慣懈糯,給每個活動都添加類似的啟動方法灭美,啟動活動將會變得非常簡單、直觀昂利!
本章小節(jié):這一章是對第四章的補充届腐,介紹了三個編寫android活動時的實用技巧:定位當(dāng)前活動、隨時退出程序蜂奸、優(yōu)化啟動活動犁苏。
這些技巧在實際編程中可以幫助我們編程變得輕松,同時避免一些錯誤扩所。技巧围详、經(jīng)驗最終源于實際開發(fā)過程中的點滴積累,這必將是一個長期持續(xù)的過程祖屏。
琛 不求打賞助赞,只求一贊:)
作者:葉琛
癡迷編程和旅行的 IT程序狗