AndroidのTasks and Back Stack

3991 ワード

デフォルトの動作1.Activity AがActivity Bを起動すると、A stopped、システムはA状態を保存します.Back pressedの場合、A resumedは相関状態を回復する.2.Home button pressedの場合、現在activity stopped、taskはbackgroundのように進み、システムは各taskの状態を保存する.ユーザがtaskのappを開始する前に開始すると、taskはフロントに入り、taskスタックトップのActivityを復元する.3.ユーザーがBackをクリックすると、現在のActivityはtask stackからポップアップされ、destroyされ、システムもその状態をretainしなくなる.4.Activitiesは、他のtasksからも複数回インスタンス化することができる.
Saving Activity State
Activity stoppedの場合、システムはデフォルトでステータスを保存します.また、コールバック関数を使用してActivityの状態を保存することを推奨し、システムがメモリを保存しないでメモリ回収を行い、バックグラウンドに入ったtaskを破棄することを防止します.この場合、システムが再びtaskに入ると、システムはtaskチェーンを有しているが、taskスタックの上部のActivityを表示すると、resumeではなく再createとなる.したがって、アクティブにコールバック関数onSaveInstanceState()を使用してActivity Stateを保存する必要があります.
Managing Tasks
Principal < activity > attributs
taskAffinity
launchMode
allowTaskReparenting
clearTaskOnLaunch
alwaysRetainTaskState
finishOnTaskLaunch

Principal intent flags:
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP

Define launch modes
  • マニフェスト指定、task
  • を使用
  • Intent Flags
  • を使用
    AでBを起動すると、AはBを起動するFlagを指定し、BもManifestで異なるtaskを指定します.この場合、Intentで指定されたFlagsは、Manifestで指定されたtaskを上書きします.
    また、一部のlaunchmodeはflagにありますが、Manifestにはありません.同様に、Manifestにあり、flagにあります.
  • マニフェストFile
  • を使用
    activityのlaunchModeプロパティを指定します.
    |standard|singleTop|singleTask|singleInstance|
    |---   |   |   |   |
    |   ,       ,     task,     task|      Activity     ,     ,       Activity Intent    onNewIntent()         Activity  ,         。      Activity       ,       。  :     ,back button      onNewIntent     ,  task back stack      。|    task,   Activity task   。       task stack     Activity   ,           task   ,      task  Activity,   task stack      Activity,      ,    Intent  onNewIntent   Activity。     ,Activity      。|   singleTask,Activity      ,     task       ,      Activity         task  。
    

    Android BrowserはsingleTaskモードを使用したアプリケーションです.さらに、back stackの場合、Activityが新しいtaskに起動されても、そのActivityが存在するtask stackに起動されても、back buttonは前のActivityに戻ることができます.また、singleTaskモードを使用したActivityを起動する場合、システムはまずそれ自体のモードで起動し、その後、Activityが存在するtask stack全体を起動するback stackに移行する.図に示すように、
  • Intent Flags
  • を使用
    startActivityで指定できるflagは、次のとおりです.
    FLAG_ACTIVITY_NEW_TASK
    FLAG_ACTIVITY_SINGLE_TOP
    FLAG_ACTIVITY_CLEAR_TOP
    singTaskプロパティと同じ
    singleTopと同じ
    起動するActivityがtaskスタックにすでに存在する場合、システムはActivity要素をtaskスタックの上部にあるすべてのActivityにclearをドロップし、onNewIntent()を介してスタックの上部にあるActivityにIntentを渡します.このflagは通常FLAG_とACTIVITY_NEW_TASKと一緒に使います.
    Handling affinities
    affinity属性はActivityが加わる傾向のあるtaskを示唆している.デフォルトでは、同じアプリケーションのActivityは同じtaskにある傾向があります.activity要素のtaskAffinityプロパティを変更できます.このプロパティの値は文字列で、デフォルトはパッケージ名です.したがって、異なるtaskで起動する傾向がある場合は、パッケージ名とは異なる文字列を指定します.
    Affinityを使用する2つのケース-FLAG_を使用するACTIVITY_NEW_TASK
    AがBを起動すると、FLAG_が指定されるACTIVITY_NEW_TASKでは、まずこの新しいBを搭載する傾向のあるtaskを探します.Bと同じAffinityを持つtaskがある場合は、それをtaskに起動し、そうでない場合は新しいtaskを起動します.例えばInCallScreenでは、ユーザーがホームを押してActivityを離れると、どのようにActivityに戻るかは、launchで起動する以外に(launchModeがmainの場合)、notification barで表示することもできます.-Activity要素の属性allowTaskReparentingはtrueで、本AppliancationのActivity Aは他のApplicationのActivity Bと同じaffinityを持つことを意味します.では、AでBを起動すると、BはAに属するtaskを、Bが属するApplicationが起動すると、BはAが属するtaskからReparentingを介してBが属するApplicationに適用される.
    Clearing the back stack
    ユーザーがtaskから長い間離れると、システムはtaskをクリーンアップし、task stackのroot activtiだけを残します.ユーザがtaskに戻るとrestore root Activityのみが表示されます.しかし、いくつかのActivityはこのような動作を修正することができます.
  • alwaysRetainTaskStateこのプロパティがroot activity of a taskに設定されている場合、デフォルトの動作は発生しません.
  • clearTaskOnLaunch root activity of a taskのこの属性をtrueに設定すると、ユーザーがtaskを離れるにしても再アクセスするにしてもroot activity以外のactivitiesはクリアされます.alwaysRetainTaskStateとは正反対です.
  • finishOnTaskLaunchは単一Activityにのみ作用し、状態を保存せず、離れると破棄する.1つのtaskにある場合、離れた後、activityは破棄され、task stackスタックからポップアップされ、taskに入ると、taskの前のactivityがフロントに表示されます.root activity of taskにも作用します.例えばInCallScreenは使い終わったら破棄できます.