青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

life02

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  197 隨筆 :: 3 文章 :: 37 評論 :: 0 Trackbacks
 http://www.cnblogs.com/kingcent/archive/2011/03/28/1997647.html
Activity是Android程序的表現層。程序的每一個顯示屏幕就是一個Activity。正在運行的Activity處在棧的最頂端,它是運行狀態的。

       當有新的Activity進入屏幕最上端時,原來的Activity就會被壓入第二層。如果他的屏幕沒有被完 全遮蓋,那么他處于Paused狀態,如果他被遮蓋那么處于Stop狀態。

不管處于任何一層,都可能在系統覺得資源不足時被強行關閉,當然關閉時棧底的程序最先被關閉。

       譬如:當你在程序中調用 Activity.finish()方法時,結果和用戶按下 BACK 鍵一樣:他告訴 Activity Manager該Activity實例可以被“回收”。隨后 Activity Manager 激活處于棧第二層的 Activity 并重 新入棧,把原 Activity 壓入到棧的第二層,從 Running 狀態轉到 Paused 狀態。

1、Task和Activity

task是能包含很多activity的棧。默認情況下,一個activity啟動另外一個activity時,兩個activity是放在同一個task棧中的,第二個activity壓入第一個 activity所在的task棧。當用戶按下返回鍵時,第二個activity從棧中彈出,第一個activity又在當前屏幕顯示。這樣,從用戶角度來看,這兩個activity就好像是屬于同一個應用程序的,即使第二個activity是屬于另外一個應用程序的。當然,這是指默認情況下。 task棧包含的是activity的對象。如果一個activity有多個實例在運行,那么棧中保存的是每個實例的實體。棧中的activity不會重新排列,只有彈出和壓入操作。一個task中的所有activity都以整體的形式移動。整個task可以被移到前臺或后臺。打個比方,當前的task包含4個activity–當前 activity下面有3個activity。當用戶按下HOME鍵返回到程序啟動器(application launcher)后,選擇了一個新的應用程序(事實上是一個新的task),當前的task就被轉移到后臺,新的task中的根activity將被顯示在屏幕上。過了一段時間,用戶按返回鍵回到了程序啟動器界面,選擇了之前運行的程序(之前的task)。那個task,仍然包含著4個 activity。當用戶再次按下返回鍵時,屏幕不會顯示之前留下的那個activity(之前的task的根activity),而顯示當前 activity從task棧中移出后棧頂的那個activity。剛剛描述的行為是默認的activity和task的行為。有很多方法能夠改變這種行為。activity和task之間的聯系,以及task中的 activity的行為可以通過intent中的標記以及在manifest中的<activity>元素的屬性控制。其中,主要的 Intent標記有:

l FLAG_ACTIVITY_NEW_TASK

l FLAG_ACTIVITY_CLEAR_TOP

l FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

l FLAG_ACTIVITY_SINGLE_TOP

主要的<activity>屬性有:

l taskAffinity

l launchMode

l allowTaskReparenting

l clearTaskOnLaunch

l alwaysRetainTaskState

l finishOnTaskLaunch

默認情況下,一個應用程序中的所有activity都有一個affinity–這讓它們屬于同一個task。然而,每個activity可以通過<activity>中的taskAffinity屬性設置單獨的affinity。不同應用程序中的activity可以共享同一個 affinity,同一個應用程序中的不同activity也可以設置成不同的affinity。affinity屬性在2種情況下起作用:當啟動 activity的Intent對象包含FLAG_ACTIVITY_NEW_TASK標記,或當activity的 allowTaskReparenting被設置成true。

l FLAG_ACTIVITY_NEW_TASK標記

當傳遞給startActivity()的Intent對象包含FLAG_ACTIVITY_NEW_TASK標記時,系統會為需要啟動的activity 尋找與當前activity不同的task。如果要啟動的activity的affinity屬性與當前所有的task的affinity屬性都不相同,系統會新建一個帶那個affinity屬性的task,并將要啟動的activity壓到新建的task棧中;否則將activity壓入那個 affinity屬性相同的棧中。

l allowTaskReparenting屬性

如果一個activity的allowTaskReparenting屬性為true,那么它可以從一個task(TASK1)移到另外一個有相同affinity的task(TASK2)中(TASK2帶到前臺時)。

如果一個.apk文件從用戶角度來看包含了多個“應用程序”,你可能需要對那些activity賦不同的affinity值。

2、運行模式

activity的launchMode屬性可以有四種值:

l “standard” (默認)

l “singleTop“

l “singleTask“

l “singleInstance“

這4種模式可以按4種分類來區分,以下假設位于task1中的activity1啟動activity2:

模式\分類

包容activity2的task

一個activity是否允許有多個實例

activity是否允許有其它activity共存于一個task

對于新的intent,是否總是實例化activity對象

standard

如果不包含FLAG_ACTIVITY_NEW_TASK標記,則activity2放入task1,否則按前面講述的規則為activity2選擇task

可被多次實例化,同一個task的不同的實例可位于不同的task中,每個task也可包含多個實例

允許

是的。當接收到新的intent時,總是會生成新的activity對象。

singleTop

同standard

同standard

允許

已存在的activity對象,如果位于目標task的棧頂,則該activity被重用,如果它不位于棧頂,則會實例化新的activity對象

singleTask

將activity2放到task1棧底

不能有多個實例。由于該模式下activity總是位于棧頂,所以actvity在同一個設備里至多只有一個實例

允許。singleTask模式的activity總是位于棧底位置。目標activity實例已存在時,如果該實例剛好位于task棧頂,則接收 intent,否則到來的intent將會被丟棄,但該可以響應該intent的那個activity所在的task將會被移到前臺。

 

singleInstance

同singleTask

同singleTask

不允許與其它activity共存于一個task。如果activity1的運行在該模式下,則activity2一定與activity1位于不同的task

 

對于新到的intent,如果是由新創建的activity對象來接收,則用戶可以通過返回鍵回到之前的activity;如果是由已存在的activity來接收,則用戶無法通過返回鍵返回到接收intent之前的狀態。

3、清空棧

當用戶長時間離開task(當前task被轉移到后臺)時,系統會清除task中棧底activity外的所有activity。這樣,當用戶返回到task時,只留下那個task最初始的activity了。

這是默認的情況,<activity>中有些屬性可以改變這種行為。

l alwaysRetainTaskState屬性

如果棧底activity的這個屬性被設置為true,剛剛描述的情況就不會發生。task中的所有activity將被長時間保存。

l clearTaskOnLaunch屬性

如果棧底activity的這個屬性被設置為true,一旦用戶離開task,則task棧中的activity將被清空到只剩下棧底activity。這種情況剛好與alwaysRetainTaskState相反。即使用戶只是短暫地離開,task也會返回到初始狀態(只剩下棧底acitivty)。

l finishOnTaskLaunch屬性

這個屬性與clearTaskOnLaunch相似,但它只對單獨的activity操作,而不是整個task。它可以結束任何activity,包括棧底的activity。當它設置為true時,當前的activity只在當前會話期間作為task的一部分存在,當用戶退出activity再返回時,它將不存在。

另外還有一種方法能將activity強行從stack中移出。如果intent對象包含 FLAG_ACTIVITY_CLEAR_TOP標記,當目標task中已存在與接收該intent對象的activity類型相同的activity實例存在時,所有位于該activity對象上面的activity將被清空,這樣接收該intent的activity就位于棧頂,可以響應到來的 intent對象。如果目標activity的運行模式為standard,則目標activtiy也會被清空。因為當運行模式為standard時,總會創建新的activity對象來接收到來的intent對象。

FLAG_ACTIVITY_CLEAR_TOP標記常常和FLAG_ACTIVITY_NEW_TASK一起使用。用2個標記可以定位已存在的activity并讓它處于可以響應intent的位置。

4、啟動任務(Task)

Intent filter中有”android.intent.action.MAIN” action和”android.intent.category.LAUNCHER” category的activity將被標記為task的入口。帶有這兩個標記的activity將會顯示在應用程序啟動器(application launcher)中。

第二個比較重要的點是,用戶必須能夠離開task并在之后返回。因為這個原因,singleTask和 singleInstance這兩種運行模式只能應用于含有MAIN和LAUNCHER過濾器的activity。打個比方,如果不包含帶MAIN和 LAUNCHER過濾器,某個activity運行了一個singleTask模式的activity,初始化了一個新的task,當用戶按下HOME鍵時,那個activity就被主屏幕“擋住”了,用戶再也無法返回到那個activity。

類似的情況在 FLAG_ACTIVITY_NEW_TASK標記上也會出現。如果這個標記會新建一個task,當用戶按下HOME鍵時,必須有一種方式能夠讓用戶返回到那個activity。有些東西(比如notification manager)總是要求在外部task中啟動activity,在傳遞給startActivity的intent中總是包含 FLAG_ACTIVITY_NEW_TASK標記。

對于那種不希望用戶離開之后再返回activity的情況,可將finishOnTaskLaunch屬性設置為true。


實戰篇:

    場景1:我們需要一個activity一直存活,且狀態一直保留我們可以讓該activity獨占一格task棧,如下設置activity屬性。

     android:launchMode="singleInstance" android:taskAffinity="com.test"

     把launchMode和taskAffinity結合起來用會有異想不到的效果。

    場景2:我們需要一個activity  ——“A” 存活于task棧并且一旦返回A,那么A之上的所有activity都會被銷毀。如下設置activity屬性。

     android:launchMode="singleTask"  android:clearTaskOnLaunch="true"


分類: Android
posted on 2012-02-21 16:19 life02 閱讀(561) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美视频中文字幕在线| 日韩天堂在线视频| 亚洲精品乱码久久久久久| 久久久久国产精品一区三寸 | 在线日韩av片| 99在线视频精品| 久久人人97超碰精品888| 欧美精品一区二区久久婷婷| 最新中文字幕亚洲| 免费观看成人www动漫视频| 久久色在线播放| 国产日韩在线视频| 亚洲精品一品区二品区三品区| 亚洲人成人99网站| 一区二区三区四区精品| 91久久精品网| 在线视频精品一| 噜噜噜躁狠狠躁狠狠精品视频| 在线观看91精品国产入口| 性欧美xxxx大乳国产app| 亚洲国产乱码最新视频| 国产女人精品视频| 美女福利精品视频| 亚洲裸体俱乐部裸体舞表演av| 欧美在线日韩在线| 在线观看日韩精品| 激情小说另类小说亚洲欧美| 牛牛影视久久网| 欧美激情亚洲| 91久久久亚洲精品| 欧美视频在线观看免费网址| 老司机精品久久| 欧美日韩视频| 韩国精品主播一区二区在线观看| 亚洲国产精品一区在线观看不卡| 99热这里只有成人精品国产| 亚洲国产免费看| 欧美手机在线| 国产一区二区三区四区三区四 | 国产精品99久久久久久宅男 | 欧美激情一区二区三区高清视频 | 亚洲欧美国产视频| 亚洲福利久久| 激情视频一区二区| 国产精品成人观看视频免费| 欧美色视频在线| 欧美精品久久天天躁| 国产一区二区主播在线| 日韩五码在线| 欧美小视频在线| 老鸭窝亚洲一区二区三区| 欧美精品久久久久久久久老牛影院| 国产亚洲精品福利| 久久国产夜色精品鲁鲁99| 欧美精品系列| 亚洲国产成人高清精品| 欧美亚洲一级| 99视频在线精品国自产拍免费观看 | 一区在线影院| 午夜精品久久久久久久| 亚洲免费观看高清完整版在线观看| 久久精品一区二区三区四区| 国产色产综合色产在线视频| 亚洲一区观看| 亚洲精品免费在线| 欧美韩日精品| 亚洲免费av观看| 亚洲精品日韩一| 欧美—级在线免费片| 亚洲三级电影全部在线观看高清| 媚黑女一区二区| 久久久噜噜噜久久中文字幕色伊伊| 国产日韩精品一区二区浪潮av| 亚洲欧美日韩在线一区| 亚洲视频播放| 国产精品日韩精品| 欧美成人黄色小视频| 欧美亚洲一区三区| 午夜精品久久久久久久久久久久| 国产精品热久久久久夜色精品三区 | 亚洲精品在线看| 欧美日韩国产小视频在线观看| 亚洲精品视频在线播放| 亚洲电影在线看| 欧美日韩免费高清一区色橹橹| 日韩午夜黄色| 一区二区三区视频免费在线观看| 欧美了一区在线观看| 一区二区av在线| 亚洲一区二区精品在线| 国模一区二区三区| 亚洲国产精品久久久久婷婷884| 欧美激情日韩| 亚洲欧美中日韩| 久久久高清一区二区三区| 在线欧美三区| 亚洲美女中出| 国产在线乱码一区二区三区| 欧美国产日韩精品| 国产精品国产三级国产| 久久九九精品99国产精品| 可以看av的网站久久看| 久久久久国产精品麻豆ai换脸| 亚洲欧洲日本国产| 一区二区三区www| 欧美性猛交xxxx乱大交蜜桃 | 一本色道久久综合亚洲精品婷婷| 国产伦精品一区二区三区高清| 久久精品一区二区三区四区| 美女图片一区二区| 亚洲一区二区三区四区五区黄 | 国产麻豆精品在线观看| 欧美成人精品激情在线观看| 久久精品国产视频| 亚洲视频在线观看免费| 欧美在线视频播放| 中文在线资源观看视频网站免费不卡| 性欧美长视频| 亚洲一品av免费观看| 久久女同精品一区二区| 欧美一区二区三区久久精品茉莉花 | 久久精品日产第一区二区| 欧美成人中文字幕| 久久夜色精品国产欧美乱极品| 欧美三级日本三级少妇99| 久久亚洲一区二区| 国产免费亚洲高清| 一区二区三区四区五区视频| 亚洲欧洲日产国码二区| 亚洲国产成人av在线 | 日韩性生活视频| 欧美在线观看网站| 亚洲免费在线视频| 欧美精品综合| 欧美sm视频| 在线观看久久av| 篠田优中文在线播放第一区| 亚洲欧美日本精品| 欧美三级午夜理伦三级中文幕| 亚洲国产精品热久久| 激情欧美一区二区三区在线观看| 午夜精品在线视频| 欧美影片第一页| 国产乱码精品一区二区三区忘忧草| 亚洲免费观看在线视频| 亚洲欧洲另类国产综合| 欧美高清视频在线观看| 亚洲丶国产丶欧美一区二区三区| 在线精品视频一区二区| 久久久夜精品| 欧美成人在线免费视频| 亚洲国内精品| 欧美国产精品劲爆| 亚洲精品一区在线观看| 中文在线一区| 国产欧亚日韩视频| 久久国产黑丝| 欧美激情中文字幕乱码免费| 日韩视频精品在线| 亚洲国产网站| 欧美成人综合一区| 国产香蕉97碰碰久久人人| 亚洲无限av看| 久久久www| 亚洲丶国产丶欧美一区二区三区| 久久亚洲影院| 亚洲人成在线播放网站岛国| av成人国产| 国产精品伦子伦免费视频| 亚洲一区二区三区在线| 久久亚洲综合色| 一区二区欧美国产| 国产人妖伪娘一区91| 久久久亚洲成人| 一区二区三区国产精品| 欧美在线亚洲| 亚洲精品国产精品国自产观看| 欧美午夜www高清视频| 午夜视频在线观看一区二区三区| 久久一区二区三区av| 亚洲精品久久久久久久久久久久| 欧美日韩免费精品| 久久国产精品电影| 亚洲欧洲一级| 西瓜成人精品人成网站| 亚洲第一成人在线| 国产精品久久久久久久午夜片 | 欧美一级精品大片| 欧美激情欧美狂野欧美精品| 亚洲欧美日韩天堂一区二区| 亚洲激情自拍| 国产精品r级在线| 久久亚洲精品伦理| 亚洲免费在线视频| 亚洲激情成人| 久久综合伊人77777尤物| 亚洲视频在线二区| 樱花yy私人影院亚洲| 国产精品久久久一区二区三区| 欧美一区2区视频在线观看|