Activity隨筆,

來源:互聯網
上載者:User

Activity隨筆,

Activity的生命週期 

1.正常情況下的生命週期

      

Activity的生命週期切換過程

  關於onStart和onResume、onPause和onStop的不同,onStart和onStop是從Activity是否可見這個角度來回調,onResume和onPause是從Activity是否位於前台這個角度來回調的,除了這種區別,在實際使用中沒有其他明顯的區別。

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

  資源相關的系統配置發生改變導致Activity被殺死並重新建立

  

                                   異常情況下Activity的重建過程

  當手機旋轉螢幕時,系統配置方式發生邊,在預設情況下Activity就會被銷毀並且重新建立。當系統配置發生改變後,Activity會被銷毀,其onPause、onStop、onDestory均會被調用,同時由於Activity是在異常情況下終止的,系統會調用onSaveInstanceState來儲存當前Activity的狀態(正常情況下系統不會調用這個方法)。這個方法調用時機在onStop之前,和onPause沒有時序關係(可能在onPause之前也可能之後)。當Activity被重新建立之後,系統會調用onRestoreInstanceState,並且把Activity銷毀時onSaveInstanceState儲存的bundle傳給onRestoreInstanceState和onCreate方法。可以通過bundle是否為空白來判斷Activity是否被重建了。如果被重建了,可以取出之前儲存的資料並恢複,從時序上來講,onRestoreInstanceState的調用時機在onStart之後。一般情況下,旋轉螢幕後Activity會重新建立。但是當設定Activity的configChanges屬性為orientation|screenSize之後Activity不會重新建立。

3.Activity的啟動模式LaunchMode

4.Activity的Flags

  FLAG_ACTIVITY_NEW_TASK

  這個標記位的作用是為Activity指定“singleTask”啟動模式,其效果和在XML中指定該模式相同。

  FLAG_ACTIVITY_SINGLE_TOP

  這個標記位的作用是為Activity指定“singleTop”啟動模式,其效果和在XML中指定該模式相同。

  FLAG_ACTIVITY_CLEAR_TOP

  具有此標記位的Activity,當它啟動時,在同一個任務棧中所有位於它上面的Activity都要出棧。

5.IntentFilter的匹配規則

  隱式調用需要Intent能夠匹配目標組件的IntentFilter中所設定的過濾資訊,如果不匹配將無法啟動目標Activity。IntentFilter中的過濾資訊有action、category、data。一個Intent只有同時匹配action類別、category類別、data類別才算完全符合。另外,一個Activity中可以有多個intent-filter,一個Intent只要能匹配任何一組intent-filter即可成功啟動對應的Activity。

  1.action的匹配規則

  action是一個字串,系統預定義了一些action,我們也可以在應用中定義自己的action。action的匹配要求Intent中的action存在且必須和過濾規則中的其中一個action相同,這裡需要注意和category匹配規則的不同。action區分大小寫,大小寫不同字串相同的action會匹配失敗。

  2.category的匹配規則

  Intent中如果有category,那麼所有的category都必須和過濾規則中的其中一個category相同。當然,Intent中可以沒有category,但它仍然可以匹配成功,原因是系統在調用startActivity和startActivityForResult的時候會預設為Intent加上“android.intent.category.DEFAULT”這個category。同時為了我們的activity能夠接收隱式調用,就必須在intent-filter中指定“android.intent.category.DEFAULT”這個category。

  3.data的匹配規則

  data由兩部分組成,mimeType和URI。mimeType指媒體類型,比如image/jpeg、audio/mpeg4-generic和video/*等,而URI中包含的資料就比較多了。下面是URI的結構:

    <scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]

  Scheme:  URI的模式,比如http、file、content等,如果URI中沒有指定scheme,那麼整個URI是無效的。

  Host:  URI的主機名稱,比如www.biadu.com

  Port:  URI中的連接埠號碼

  Path、pathPattern和pathPrefix:  這三個參數表述路徑資訊,其中path表示完整的路徑;pathPattern也表示完整的路徑資訊,但是它裡面可以包含萬用字元;pathPrefix表示路徑的首碼資訊。

  最後,當我們通過隱式方式啟動一個Activity的時候,可以做一下判斷,看是否有Activity能夠匹配我們的隱式Intent。判斷方法有兩種:採用PackageManager的resolveActivity方法或者Intent的resolveActivity方法如果找不到匹配的Activity就會返回null。

 

參考自《Android開發藝術探索》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.