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:鈍化