Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android launchmode 使用場景

android launchmode 使用場景

編輯:關於Android編程

菜鳥起飛記

android launchmode 使用場景

Activity一共有以下四種launchMode:

1.standard

2.singleTop

3.singleTask

4.singleInstance

一,引用場景分析

1.standard 是默認的系統啟動模式,每次啟動activity都會新建一個實例,也就是說即使啟動相同的activity ,他所產生的對象也是不同的.

 

\

該種模式大多用於 頁面切換的 中間頁,每次都是新頁面(適用於大多場景).

2.singleTop 單一棧頂 standard的改進版,在同一個棧.

singleTop適合接收通知啟動的內容顯示頁面(推送啟動的界面)。例如,某個新聞客戶端的新聞內容頁面,如果收到10個新聞推送,每次都打開一個新聞內容頁面是很煩人的。

\

3.singleTask 同一個棧 只能有一個實例.

適合作為程序入口點。例如浏覽器的主界面。不管從多少個應用啟動浏覽器,只會啟動主界面一次,其余情況都會走onNewIntent,並且會清空主界面上面的其他頁面。

\

4.singleInstance 新建一個棧, 而且棧裡只有一個實例 ,新建一次,多次重復利用.

適合需要與程序分離開的頁面。例如鬧鈴提醒,將鬧鈴提醒與鬧鈴設置分離。singleInstance不要用於中間頁面,如果用於中間頁面,跳轉會有問題,比如:A -> B (singleInstance) -> C,完全退出後,在此啟動,首先打開的是B。某個應用中用到了google地圖,當退出該應用的時候,進入google地圖,還是剛才的界面

 

\

二,Intent設置應用場景

例如:

      Intent intent=new Intent(QuestionActivity.this,UserInfoAvtivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(intent);

 

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的頂端運行時,不再啟動一個新的。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved