咱們如果在Service應如何啓動Actvity ??

不少時候,咱們但願一個服務運行到某個條件知足的時候,打開一個窗口。在Android中表現爲用Service啓動Actvity.java

  若是在Service啓動Actvity,關鍵是加上一行代碼網絡

  [java] view plaincopyprint?ide

  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);函數

  這裏須要解釋,Flag的意義。測試

  (如下資料摘自網絡)xml

  首先簡單說下Task和Activity的關係。文檔

  Task就像一個容器,而Activity就至關與填充這個容器的東西,第一個東西(Activity)則會處於最下面,最後添加的東西(Activity)則會在最上面。從Task中取出東西(Activity)是從最頂端取出,也就是說最早取出的是最後添加的東西(Activity),以此類推,最後取出的是第一次添加的Activity,而Activity在Task中的順序是能夠控制的,在Activity跳轉時用到Intent Flag能夠設置新建activity的建立方式;it

  Intent.FLAG_ACTIVITY_NEW_TASKclass

  默認的跳轉類型,會從新建立一個新的Activity,不過與這種狀況,比方說Task1中有A,B,C三個Activity,此時在C中啓動D的話,若是在Manifest.xml文件中給D添加了Affinity的值和Task中的不同的話,則會在新標記的Affinity所存在的Task中壓入這個Activity.若是是默認的或者指定的Affinity和Task同樣的話,就和標準模式同樣了啓動一個新的Activity.容器

   FLAG_ACTIVITY_SINGLE_TOP

  這個FLAG就至關於加載模式中的singletop,好比說原來棧中狀況是A,B,C,D在D中啓動D,棧中的狀況仍是A,B,C,D

  FLAG_ACTIVITY_CLEAR_TOP

  這個FLAG就至關於加載模式中的SingleTask,這種FLAG啓動的Activity會把要啓動的Activity之上的Activity所有彈出棧空間。類如:原來棧中的狀況是A,B,C,D這個時候從D中跳轉到B,這個時候棧中的狀況就是A,B了

  FLAG_ACTIVITY_BROUGHT_TO_FRONT

  這個網上不少人是這樣寫的。若是activity在task存在,拿到最頂端,不會啓動新的Activity.這個有可能會誤導你們! 他這個FLAG實際上是這個意思! 比方說我如今有A,在A中啓動B,此時在A中Intent中加上這個標記。此時B就是以  FLAG_ACTIVITY_BROUGHT_TO_FRONT 這個啓動的,此時在B中再啓動C,D(正常啓動C,D),若是這個時候在D中再啓動B,這個時候最後的棧的狀況是 A,C,D,B. 特別注意的是,我上面說的網上人描述的這個FLAG,會很容易讓人誤解成這樣,A,B,C,D都是標準加載,而後我在D中啓動A,這個intent加上FLAG_ACTIVITY_BROUGHT_TO_FRONT  ,就會誤認爲變成B,C,D,A!!其實不是,這個時候應該是A,B,C,D,A.不信的人你們試試看。不過下面這個標記和這個標記就會讓你們明白了!

  FLAG_ACTIVITY_REORDER_TO_FRONT

  就按在 Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT 最後說的,若是在A,B,C,D正常啓動的話,無論B有沒有用FLAG_ACTIVITY_BROUGHT_TO_FRONT啓動,此時在D中啓動B的話,仍是會變成A,C,D,B的。

  FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

  這個也不知道具體怎麼用,看文檔有點象開闢新的Task,不過測試完,不像那麼簡單。由於測試結果很失望,用這個啓動的Activity的TaskId是同樣的!具體怎麼用! 請你們知道的留言,謝謝!

  FLAG_ACTIVITY_NO_USER_ACTION

  onUserLeaveHint()做爲activity週期的一部分,它在activity由於用戶要跳轉到別的activity而要退到background時使用。

  好比,在用戶按下Home鍵(用戶的choice),它將被調用。好比有電話進來(不屬於用戶的choice),它就不會被調用。

  那麼系統如何區分讓當前activity退到background時使用是用戶的choice?

  它是根據促使當前activity退到background的那個新啓動的Activity的Intent裏是否有     FLAG_ACTIVITY_NO_USER_ACTION來肯定的。

  注意:經過調用finish()使該activity銷燬時不會調用該函數

  FLAG_ACTIVITY_NO_HISTORY

  用這個標記顧名思義! 意思就是說用這個FLAG啓動的Activity,一旦推出,他就不會存在於棧中,比方說!原來是A,B,C 這個時候再C中以這個FLAG啓動D的 , D再啓動E,這個時候棧中狀況爲A,B,C,E.

相關文章
相關標籤/搜索