Android開發(fā)(五)| 活動的最佳實踐

在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()方法,如圖所示:

新建BaseActivity

這個活動類非常簡單耸成。我們只做了一件事:在它的onCreate()方法中獲取當(dāng)前實例的類名报亩,并通過Log打印出來。接著我們只要讓其他所有原本繼承自Activity的活動井氢,改為繼承BaseActivity即可弦追。

例如一個火車票查詢實例,運行這個程序?qū)⑦M(jìn)入到MainActivity界面花竞,點擊按鈕劲件,跳轉(zhuǎn)至更改屬性的SecondActivity活動界面。

MainActivity
SecondActivity

這時我們觀察LogCat中的打印信息:

LogCat

繼續(xù)深入開發(fā)约急,無論有多少個活動零远,無論跳轉(zhuǎn)到哪個界面,該活動的類名就會被打印出來一目了然烤宙。這樣我們時刻能知曉當(dāng)前界面對應(yīng)的是哪一個活動了遍烦。

二、隨時隨地退出程序

如果目前我們的手機界面還停留在SecondActivity躺枕,想要退出這個程序需要連按兩次Back鍵服猪,如果跳轉(zhuǎn)了多個活動則不得不按多次Back鍵退出供填。至于Home鍵,它只是把程序高高掛起罢猪,并沒有退出程序近她。

問題來了:如果我們的程序需要一個注銷或退出的功能該怎么辦呢?

好在解決思路并不復(fù)雜膳帕,只需要一個專門的集合類對所有的活動進(jìn)行管理就ok了粘捎。下面我們來實現(xiàn)第二個技巧。

以上一實例為例危彩,新建一個ActivityCollector類作為活動管理器攒磨,代碼如下:

新建ActivityCollector類

在活動管理器中,我們通過一個List暫存活動汤徽,然后提供了一個addActivity()方法向List中添加一個活動娩缰,提供了一個removeActivity()方法從List中移除活動。最后提供了一個finishAll()方法將List中存儲的活動全部銷毀谒府。

接下來修改BaseActivity中的代碼拼坎,如下:

調(diào)用ActivityCollector類的方法

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來完成葛圃。

《安卓開發(fā)四 | 活動和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中的代碼:

封裝傳遞的參數(shù)

我們在SecondActivity中添加了一個actionStart()方法,在這個方法中完成了Intent構(gòu)建曲伊;而且所有SecondActivity中需要的數(shù)據(jù)都是通過actionStart()方法的參數(shù)傳遞過來的叽讳,然后把它們存儲到Intent中,最后調(diào)用startActivity()方法啟動SecondActivity坟募。

這樣寫的好處在于一目了然:我們非常清晰地知道啟動SecondActivity需要傳遞哪些參數(shù)岛蚤。同時還簡化了啟動活動的代碼,現(xiàn)在啟動SecondActivity只需要一行代碼搞定:

啟動SecondActivity

如果我們養(yǎng)成良好的編程習(xí)慣懈糯,給每個活動都添加類似的啟動方法灭美,啟動活動將會變得非常簡單、直觀昂利!


本章小節(jié):這一章是對第四章的補充届腐,介紹了三個編寫android活動時的實用技巧:定位當(dāng)前活動、隨時退出程序蜂奸、優(yōu)化啟動活動犁苏。

這些技巧在實際編程中可以幫助我們編程變得輕松,同時避免一些錯誤扩所。技巧围详、經(jīng)驗最終源于實際開發(fā)過程中的點滴積累,這必將是一個長期持續(xù)的過程祖屏。

琛 不求打賞助赞,只求一贊:)


作者:葉琛

癡迷編程和旅行的 IT程序狗

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市袁勺,隨后出現(xiàn)的幾起案子雹食,更是在濱河造成了極大的恐慌,老刑警劉巖期丰,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件群叶,死亡現(xiàn)場離奇詭異,居然都是意外死亡钝荡,警方通過查閱死者的電腦和手機街立,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埠通,“玉大人赎离,你說我怎么就攤上這事《巳瑁” “怎么了梁剔?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵圾浅,是天一觀的道長。 經(jīng)常有香客問我憾朴,道長狸捕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任众雷,我火速辦了婚禮灸拍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砾省。我一直安慰自己鸡岗,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布编兄。 她就那樣靜靜地躺著轩性,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狠鸳。 梳的紋絲不亂的頭發(fā)上揣苏,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機與錄音件舵,去河邊找鬼卸察。 笑死,一個胖子當(dāng)著我的面吹牛铅祸,可吹牛的內(nèi)容都是我干的坑质。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼临梗,長吁一口氣:“原來是場噩夢啊……” “哼涡扼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起盟庞,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吃沪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后茫经,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巷波,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡萎津,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年卸伞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锉屈。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡荤傲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颈渊,到底是詐尸還是另有隱情遂黍,我是刑警寧澤终佛,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站雾家,受9級特大地震影響铃彰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芯咧,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一牙捉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧敬飒,春花似錦邪铲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至英染,卻和暖如春揽惹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背四康。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工永丝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人箭养。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓慕嚷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親毕泌。 傳聞我的和親對象是個殘疾皇子喝检,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容