android知識回顧---4大組件之activity

1.activity

  1.1.activity的生命週期:

         oncreate  onstart  onresume  onpause  onstop  onrestart  onDestory

  

  1.1.1 用戶與activity交互時,生命週期函數的調用流程:

1.啓動Activity:系統會先調用onCreate方法,然後調用onStart方法,最後調用onResume,Activity進入運行狀態。 

2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。 

3.當前Activity由被覆蓋狀態回到前臺或解鎖屏:系統會調用onResume方法,再次進入運行狀態。 

4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居後臺:系統會先調用onPause方法,然後調用onStop方法,進入停滯狀態。 

5.用戶後退回到此Activity:系統會先調用onRestart方法,然後調用onStart方法,最後調用onResume方法,再次進入運行狀態。 

6.當前Activity處於被覆蓋狀態或者後臺不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而後用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。 

7.用戶退出當前Activity:系統先調用onPause方法,然後調用onStop方法,最後調用onDestory方法,結束當前Activity。

8、橫豎屏幕切換時候activity的生命週期

①不設置activity的Android:configChanges時,切屏會重新調用各個生命週期,切橫屏時會執行一次,且豎屏時會執行兩次

②設置activity的android:configChanges=”orientation"時,切屏還是會調用各個生命週期,切橫屏,豎屏時只會執行一次

③設置activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命週期,只會執行onConfigurationChanged方法


思考題:

當activity A跳轉到activity B,這個時候會調用A生命週期的哪些函數?會調用B生命週期的哪些函數? 

A:onPause     B:onResume

特別的,以上問題中,A和B被調用所有函數的先後順序是?

先A 後B

接上問題,如果B關閉後返回A,這個時候會調用A生命週期的哪些函數?會調用B生命週期的哪些函數?A和B被調用所有函數的先後順序是?

           A: onResume   B:onPasuse  onDestory  

  1.1.2  activity的4種啓動方式  android:launchmode

       1.standard 默認模式,每次新建一個實例

        使用場景:程序內普通子頁面

       2.singleTop  允許多個實例,同一個應用程序允許多個activity,如果存在相同activity在棧頂,則調用上一個的onNewInstance()方法

     如 B是singleTop:  A-B-B  : A-B-調用B的onNewInstance   

          A-B-A-B: A-B-A-B

使用場景:新聞類的通知頁面,比如有10個通知,不需要每次點進去都是一個activity

3.singleTask 只有一個實例, 同一個應用程序中如果不存在,則新建,如果存在 則destory 之前那個activity之上的其他activity

如B是singleTask:  A-B-C-B-A-B-C-A    過程是   A-B-C: A-B-C      A-B-C-B:  A-B       A-B-C-B-A:  A-B-A      A-B-C-B-A-B:A-B   A-B-C-B-A-B-C-A :A-B-C-A

使用場景:程序的主界面,整個程序中只有各一個實例,只有一個主界面,如果有多個,則跳轉到之前的onNewInstance方法

       4.singleInstance  只有一個實例,並且該task中只有一個實例

        A-B-C 如果A是taskid 200 ,則會new  task  b,然後 C 是taskid 201

使用場景:鬧鐘鈴聲通知適合與程序分離的頁面


注意:

當使用Launch Mode 來改變系統默認的任務調度的時候,如果是用到Single Task或者Single Instance的時候,還要注意到Affinity的使用,要跟Affinity配合使用,可能才能達到我們期望中的效果。而Affinity,其實是Android提供的一個表從屬意義的參數,類似於一個Tag值,它表明當前Activity屬於哪一個Tag,相當的Affinity值的Activity,如果不使用其他的標誌,如Single Instance之類,那麼都會在存在於同一個task中。一般情況下,我們並不定義Task Affinity值,則其默認的值就是當前App的包名。



發佈了146 篇原創文章 · 獲贊 23 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章