天天看點

Android中Activity和task,活動親和力,啟動模式,活動狀态以及生命周期,激活鈍化

activity和task:

android通過保持所有activity在同一個task中來維護使用者的經曆-典型是在launcher選擇的

應用,棧頂活動是互動活動,back後,pop棧,即使涉及多個執行個體活動,不會重新管理,隻有pop和push

 task:

 task是活動的棧,task的值是作為整體設定給root activity的.

 activity:

 一個task中的所有的activity作為整體進行移動.

 activity和task的關系,以及同一task内activity的行為可通過intent對象的flag标記和清單檔案的activity元素

 進行控制.請求和相應都有一個說法.

 intent flag如下:

 flag_activity_new_task

 flag_activity_clear_top

 flag_activity_reset_task_if_needed

 flag_activity_single_top

 <activity>屬性有

 taskaffinity

 launchmode

 allowtaskreparenting

 alwaysretaintaskstate

 finishontasklaunch

 affinity和task:親和力和task

 預設時,應用程式所有activity彼此具有一個affinity-屬于同一任務.但可設定單獨的activity的affinity(通過

 <activity>屬性),不同應用程式中的activity也可以定義相同的affinity,或者同一應用,不同affinity.

 affinity生效需要兩個條件:intent對象包含flag_activity_new_task标記和allowtaskreparenting=true

  flag_activity_new_task:

  如果含該标記,系統查找不同的任務來容納新的activity,通常是建立task.但不一定這樣,如果已經存在具有同一

  affinity的task,新的activity會在那個task中啟動,若沒有,開始新的任務.

  allowtaskreparenting

  若設定該屬性為true,該activity可以彼task回到前台時有開始時的task移動到那個task上.

launch mode:

 standard:每次通路執行個體化新的對象.

 singletop:如果目标activity在棧頂,直接傳回.否則執行個體化.

 singletask:是單例,通常設定給root activity.由此開啟的activity具有相同的taskid

 singleinstance:是單例,通常設定給root activity.由此開啟的activity具有不同的taskid

 task:是activity的棧,

activity狀态:

 激活态:棧頂,正在互動

 暫停态:可見,被不完全覆寫

 停止态:不可見,完全覆寫.

activity生命周期循環:

 完整周期:oncreate() ---> ondestroy()[停止态]

 可視周期:onstart() --> onstop();[暫停态]

 前台周期:onresume()--->onpause();[激活态]

 oncreate() --- onstart()   --- onresume()  --- onpause()  -- onstop  -- ondestory()

                        |                 |          |    |

      |      |-----<----    |

      |------------<---- onrestart() -------------|

active:激活

deactive:鈍化

繼續閱讀