《Android開發(fā)藝術(shù)探索》摘錄1

這本書的信息量還是挺大的框仔,里面有很多很有用的細小的知識點,但是比較零碎拄养,所以我準備花點時間整理一下离斩,有些章節(jié)的知識點比較整體化我就直接跳過了,著重把細碎的知識點整理出來瘪匿。

第一章 Activity的生命周期和啟動模式

1.1 Activity的生命周期全面分析

1.onStart和onResume跛梗、onPause和onStop從描述上來看差不多,對我們來說有什么實質(zhì)的不同呢棋弥?
答:這兩個匹配(onStart-onStop,onResume-onPause)的回調(diào)分別表示不同的含義核偿,onStart、onStop是從Activity是否可見這個角度來回調(diào)的(比如切換到桌面或者打開新的Activity);onResume和onPause是從Activity是否位于前臺這個角度來回調(diào)的(打開了一個透明主題的Activity)嘁锯,除此以外并無其他明顯區(qū)別宪祥。

2.異常情況下的生命周期分析。

  • 資源相關(guān)的系統(tǒng)配置發(fā)生改變導(dǎo)致Activity被殺死并重新創(chuàng)建家乘,典型情況就是橫屏豎屏手機會拿到兩張不同的圖片(設(shè)定了landscape或者portrait狀態(tài)下的圖片)蝗羊。生命周期如下:
    Activity->onSaveInstanceState(用來保存當(dāng)前Activity的狀態(tài),調(diào)用在onStop之前仁锯,和onPause沒有固定的時間先后順序)->...->onDestory->重建Activity->onCreate->onStart->onRestoreInstanceState耀找,數(shù)據(jù)保存是一種典型的委托思想,上層委托下層业崖,父容器委托子元素去處理一件事情野芒。
    系統(tǒng)只會在Activity即將被銷毀并且有機會重新顯示的情況下才有機會去調(diào)用它。

  • 資源內(nèi)存不足導(dǎo)致優(yōu)先級低的Activity被殺死双炕。(該數(shù)據(jù)存儲和恢復(fù)過程和上面一種情況完全一致)優(yōu)先級順序如下:
    前臺Activity(正在和用戶交互)>可見但非前臺Activity(比如彈出一個dialog)>后臺Activity(比如已被stop,通常在手機內(nèi)存不足時我們常手動滑動刪除的就是這種Activity)

可以通過配置Activity的configChanges屬性來使得配置發(fā)生改變后Activity不被重新創(chuàng)建狞悲。

android:configChanges = "orientation|screenSize"

1.2 Activity的啟動模式

1.當(dāng)我們用ApplicationContext去啟動standard模式的Activity會報錯,原因是因為standard模式的Activity默認會進入啟動它的Activity所屬的任務(wù)棧中妇斤,但是由于非Activity類型的Context并沒有所謂的任務(wù)棧所以會出現(xiàn)問題摇锋,解決方法如下:

為待啟動Activity指定FLAG_ACTIVITY_NEW_TASK標記位丹拯,這樣啟動的時候就會為它創(chuàng)建一個新的任務(wù)棧,這個時候啟動Activity實際上是以singleTask模式(棧內(nèi)復(fù)用模式)啟動的荸恕。

2.singleTop乖酬,當(dāng)新Activity已經(jīng)位于任務(wù)棧的棧頂,那么此Activity不會被重新常見融求,同時它的onNewIntent方法會被回調(diào)咬像。需要注意,這個Activity的onCreate生宛、onStart不會被系統(tǒng)調(diào)用县昂,因為它并沒有發(fā)生改變。

3.singleTask,當(dāng)一個具有singleTask模式的Activity請求啟動后茅糜,比如Activity A七芭,系統(tǒng)首先會尋找是否存在A想要的任務(wù)棧。

  • 如果不存在就重新創(chuàng)建一個任務(wù)棧蔑赘,然后創(chuàng)建A的實例后把A放到棧中狸驳。
  • 如果存在A所需的任務(wù)棧。再看A是否在棧中有實例存在:
  • 如果有實例存在缩赛,系統(tǒng)就會把A調(diào)到棧頂并調(diào)用它的onNewIntent方法耙箍。
  • 如果實例不存在,就創(chuàng)建A的實例并把A壓入棧中酥馍。

4.singleInstance:單實例模式辩昆,一種加強的singleTask模式,此模式下的Activity只能單獨地位于一個任務(wù)棧中旨袒。

5.TaskAffinity:任務(wù)相關(guān)性汁针。這個參數(shù)標識了一個Activity所需要的任務(wù)棧的名字,默認情況下砚尽,所有Activity所需要的任務(wù)棧的名字為應(yīng)用的包名(可以單獨指定施无,但是不能和包名重復(fù))。這個屬性主要和singleTask啟動模式或者allowTaskReparenting屬性配對使用必孤。

6.為Activity指定啟動模式:

  • 通過AndroidMenifest為Activity指定啟動模式

     <activity
        android:launchMode = "singleTask" />
    
  • 通過在Intent中設(shè)置標志位來為Activity指定啟動模式猾骡,比如:

    Intent intent = new Intent();
    intent.setClass(MainActivity.this,SecondActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    

7.可以通過adb shell dumpsys activity命令來查看活動棧中activity的情況

1.3 IntentFilter的匹配規(guī)則

1.intentFilter主要用來隱式啟動,隱式啟動需要Intent能夠匹配目標組件的IntentFilter中所設(shè)置的過濾信息敷搪。
2.主要的匹配項:

  • action:
    一個過濾規(guī)則中可以有多個action兴想,只要Intent中的action能夠和過濾規(guī)則中的任何一個action相同即可匹配成功。

  • category
    category的匹配規(guī)則和action不同赡勘,它要求Intent中如果含有category嫂便,那么所有的category都必須和過濾規(guī)則中的其中一個category相同。當(dāng)然闸与,Intent中可以沒有category顽悼,如果沒有曼振,這個Intent仍然可以匹配成功。

  • data的匹配規(guī)則(加粗是因為可以通過這個來傳遞數(shù)據(jù))
    data語法如下:

      <data android:scheme = "string"
               android:host = "string"
               android:port = "string"
               android:path = "string"
               android:pathPattern = "string"
               android:pathPrefix= "string"
               android:mimeType = "string" />
    

data由兩個部分組成蔚龙,mineType和URI。mimeType指媒體類型映胁,比如image/jpeg木羹、audio/mpeg4-generic和video/*等,可以表示圖片解孙、文本坑填、視頻等不同的媒體格式,而URI中包含的數(shù)據(jù)就比較多了弛姜。

  格式:<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern]
  舉例:
  content://com.example.project:200/folder/subfolder/etc
  http://www.baidu.com:80/search/info

    - Scheme: URI的模式脐瑰,比如http、file廷臼、content等苍在,如果URI中沒有指定scheme,那么整個URI的其他參數(shù)無效荠商,這也意味著URI是無效的寂恬。
    - Host: URI的主機名,比如www.baidu.com莱没,如果host未指定初肉,那么整個URI中的其他參數(shù)無效。
    - Port:URI中的端口號饰躲,比如80牙咏,僅當(dāng)URI中指定了scheme和host參數(shù)的時候port參數(shù)才是有意義的。
    - Pah嘹裂、pathPattern和pathPrefix:這三個參數(shù)表述路徑信息妄壶,其中path表示完整的路徑;pathPattern也表示完整的路徑信息焦蘑,但是它里面可以包含通配符“*”盯拱,“*”表示0個或多個任意字符,需要注意例嘱,由于正則表達式的規(guī)范狡逢,如果想表示真實的字符串,那么“*”要寫成“\\*”,"\"要寫成“\\\\”;pathPrefix表示路徑的前綴信息拼卵。

舉個栗子:

  Intent  intent = new Intent("com.ryg.charpter_1.c");
  intent.addCategory("com.ryg.category.c");
  intent.setDataAndType(Uri.parse("file://abc"),“text/plain");
  startActivity(intent);

好了奢浑,第一章的筆記就這么多,國際慣例來個圖輕松一下腋腮,上一張最近追的《西部世界》的劇照:
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雀彼,一起剝皮案震驚了整個濱河市壤蚜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌徊哑,老刑警劉巖袜刷,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異莺丑,居然都是意外死亡著蟹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門梢莽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萧豆,“玉大人,你說我怎么就攤上這事昏名′汤祝” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵轻局,是天一觀的道長洪鸭。 經(jīng)常有香客問我,道長嗽交,這世上最難降的妖魔是什么卿嘲? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮夫壁,結(jié)果婚禮上拾枣,老公的妹妹穿的比我還像新娘。我一直安慰自己盒让,他們只是感情好梅肤,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著邑茄,像睡著了一般姨蝴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肺缕,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天左医,我揣著相機與錄音,去河邊找鬼同木。 笑死浮梢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的彤路。 我是一名探鬼主播秕硝,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼洲尊!你這毒婦竟也來了远豺?” 一聲冷哼從身側(cè)響起奈偏,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎躯护,沒想到半個月后惊来,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡棺滞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年唁盏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片检眯。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖昆淡,靈堂內(nèi)的尸體忽然破棺而出锰瘸,到底是詐尸還是另有隱情,我是刑警寧澤昂灵,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布避凝,位于F島的核電站,受9級特大地震影響眨补,放射性物質(zhì)發(fā)生泄漏管削。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一撑螺、第九天 我趴在偏房一處隱蔽的房頂上張望含思。 院中可真熱鬧,春花似錦甘晤、人聲如沸含潘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遏弱。三九已至,卻和暖如春塞弊,著一層夾襖步出監(jiān)牢的瞬間漱逸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工游沿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饰抒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓奏候,卻偏偏與公主長得像循集,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蔗草,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

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