天天看點

intent flags标記Intent Flag介紹

flag_activity_brought_to_front     

  這個标志一般不是由程式代碼設定的,如在launchmode中設定singletask模式時系統幫你設定。

flag_activity_clear_top    

  如果設定,并且這個activity已經在目前的task中運作,是以,不再是重新啟動一個這個activity的執行個體,而是在這個activity上方的所有activity都将關閉,然後這個intent會作為一個新的intent投遞到老的activity(現在位于頂端)中。      例如,假設一個task中包含這些activity:a,b,c,d。如果d調用了startactivity(),并且包含一個指向activity b的intent,那麼,c和d都将結束,然後b接收到這個intent,是以,目前stack的狀況是:a,b。 

    上例中正在運作的activity b既可以在onnewintent()中接收到這個新的intent,也可以把自己關閉然後重新啟動來接收這個intent。如果它的啟動模式聲明為“multiple”(預設值),并且你沒有在這個intent中設定flag_activity_single_top标志,那麼它将關閉然後重新建立;對于其它的啟動模式,或者在這個intent中設定flag_activity_single_top标志,都将把這個intent投遞到目前這個執行個體的onnewintent()中。 

    這個啟動模式還可以與flag_activity_new_task結合起來使用:用于啟動一個task中的根activity,它會把那個task中任何運作的執行個體帶入前台,然後清除它直到根activity。這非常有用,例如,當從notification manager處啟動一個activity。

flag_activity_clear_when_task_reset    

  如果設定,這将在task的activity stack中設定一個還原點,當task恢複時,需要清理activity。也就是說,下一次task帶着flag_activity_reset_task_if_needed标記進入前台時(典型的操作是使用者在主畫面重新開機它),這個activity和它之上的都将關閉,以至于使用者不能再傳回到它們,但是可以回到之前的activity。      這在你的程式有分割點的時候很有用。例如,一個e-mail應用程式可能有一個操作是檢視一個附件,需要啟動圖檔浏覽activity來顯示。這個activity應該作為e-mail應用程式task的一部分,因為這是使用者在這個task中觸發的操作。然而,當使用者離開這個task,然後從主畫面選擇e-mail

app,我們可能希望回到檢視的會話中,但不是檢視圖檔附件,因為這讓人困惑。通過在啟動圖檔浏覽時設定這個标志,浏覽及其它啟動的activity在下次使用者傳回到mail程式時都将全部清除。

flag_activity_exclude_from_recents    

  如果設定,新的activity不會在最近啟動的activity的清單中儲存。

flag_activity_forward_result     

  如果設定,并且這個intent用于從一個存在的activity啟動一個新的activity,那麼,這個作為答複目标的activity将會傳到這個新的activity中。這種方式下,新的activity可以調用setresult(int),并且這個結果值将發送給那個作為答複目标的activity。

flag_activity_launched_from_history     

  這個标志一般不由應用程式代碼設定,如果這個activity是從曆史記錄裡啟動的(常按home鍵),那麼,系統會幫你設定。

flag_activity_multiple_task     

  不要使用這個标志,除非你自己實作了應用程式啟動器。與flag_activity_new_task結合起來使用,可以禁用把已存的task送入前台的行為。當設定時,新的task總是會啟動來處理intent,而不管這是是否已經有一個task可以處理相同的事情。      由于預設的系統不包含圖形task管理功能,是以,你不應該使用這個标志,除非你提供給使用者一種方式可以傳回到已經啟動的task。      如果flag_activity_new_task标志沒有設定,這個标志被忽略。

flag_activity_new_task     

   如果設定,這個activity會成為曆史stack中一個新task的開始。一個task(從啟動它的activity到下一個task中的activity)定義了使用者可以遷移的activity原子組。task可以移動到前台和背景;在某個特定task中的所有activity總是保持相同的次序。      這個标志一般用于呈現“啟動”類型的行為:它們提供使用者一系列可以單獨完成的事情,與啟動它們的activity完全無關。      使用這個标志,如果正在啟動的activity的task已經在運作的話,那麼,新的activity将不會啟動;代替的,目前task會簡單的移入前台。參考flag_activity_multiple_task标志,可以禁用這一行為。 

    這個标志不能用于調用方對已經啟動的activity請求結果。

flag_activity_no_animation    

  如果在intent中設定,并傳遞給context.startactivity()的話,這個标志将阻止系統進入下一個activity時應用acitivity遷移動畫。這并不意味着動畫将永不運作——如果另一個activity在啟動顯示之前,沒有指定這個标志,那麼,動畫将被應用。這個标志可以很好的用于執行一連串的操作,而動畫被看作是更高一級的事件的驅動。

flag_activity_no_history     

  如果設定,新的activity将不再曆史stack中保留。使用者一離開它,這個activity就關閉了。這也可以通過設定nohistory特性。

flag_activity_no_user_action     

  如果設定,作為新啟動的activity進入前台時,這個标志将在activity暫停之前阻止從最前方的activity回調的onuserleavehint()。      典型的,一個activity可以依賴這個回調指明顯式的使用者動作引起的activity移出背景。這個回調在activity的生命周期中标記一個合适的點,并關閉一些notification。      如果一個activity通過非使用者驅動的事件,如來電或鬧鐘,啟動的,這個标志也應該傳遞給context.startactivity,保證暫停的activity不認為使用者已經知曉其notification。

flag_activity_previous_is_top     

   if set and this intent is being used to launch a new activity from an existing one, the current activity will not be counted as the top activity for deciding whether the new intent should be delivered to the top instead of starting a new one.

the previous activity will be used as the top, with the assumption being that the current activity will finish itself immediately.

flag_activity_reorder_to_front    

  如果在intent中設定,并傳遞給context.startactivity(),這個标志将引發已經運作的activity移動到曆史stack的頂端。      例如,假設一個task由四個activity組成:a,b,c,d。如果d調用startactivity()來啟動activity b,那麼,b會移動到曆史stack的頂端,現在的次序變成a,c,d,b。如果flag_activity_clear_top标志也設定的話,那麼這個标志将被忽略。

flag_activity_reset_task_if_needed

  if set, and this activity is either being started in a new task or bringing to the top an existing task, then it will be launched as the front door of the task. this will result in the application of any affinities needed to have that task in

the proper state (either moving activities to or from it), or simply resetting that task to its initial state if needed.

flag_activity_single_top     

  如果設定,當這個activity位于曆史stack的頂端運作時,不再啟動一個新的。