Activityのライフサイクルと起動モード

5528 ワード

本文の内容は「Android開発芸術探索」に基づいており、興味のある学生は本を買うことができ、読む価値がある.

1.ライフサイクルの各プロセス

  • onCreate:Activityが作成されていることを示し、Activityライフサイクルの最初の方法は、いくつかの初期化作業を行うことができます.
  • onStart:Activityが起動していることを示します.Activityはすでに表示されていますが、フロントには表示されません.ユーザーはインタラクティブではありません.Activityが表示されていると理解できますが、見えません.
  • onRestart:Activityが再起動中であり、Activityが非表示から可視になっていることを示します.
  • onResume:Activityがすでに表示され、フロントに表示されていることを示し、Activityがユーザーと対話してユーザーの焦点を獲得していることを示します.
  • onPause:Activityが停止していることを示し、onStopが呼び出され、onPauseが新しいActivityを実行したonResumeのみが実行されるため、時間のかかる操作はできません.
  • onStop:Activityが停止し、時間のかかる操作ができないことを示します.
  • onDestroy:Activityが破棄されることを示し、Activityライフサイクルの最後の方法は、いくつかの回収作業を行うことができます.

  • ActivityA初回起動:onCreate->onStart->onResume:
    1)ホームキーを押すと、onPause->onStop.2)Activity Bを新しく開くと、onPause->(B:onCreate->onStart->onResume)->onStop.
    Activity Aを返す場合:(B:onPause->onRestart->onStart->onResume->(B:onStop->onDestroy).
    3)backキーを押すと、onPause->onStop->onDestroy.4)スクリーンロック時:onPause->onStop.ロック解除時:onStart->onResume.5)構成変更時(回転スクリーンなど):onPause->onStop->onDestroy->onCreate->onStart->onResume.
    この時点でスクリーンロック(クロススクリーン状態):onPause->onStop->onDestroy->onCreate->onStart->onResume->onPauseロック解除(クロススクリーン状態):onResume->onPause->onStop->onDestroy->onCreate->onStart->onResume->onResume

    2.onSaveInstanceStateとonRestoreInstanceStateがトリガーされるタイミング:


    Activityがシステムによって破棄されやすくなると、onSaveInstanceStateは実行されます(backキーを押すなど、ユーザーが自発的に破棄する場合を除きます).
  • ユーザがHOMEキーを押すと.
  • HOMEキーを長押しし、他のプログラムを実行する場合を選択します.
  • 電源ボタン(画面表示をOFF)を押した場合.
  • activity Aから新しいactivityが起動されたとき.
  • 画面方向切り替えの場合、例えば縦から横に切り替えた場合.

  • onSaveInstanceStateメソッドとonRestoreInstanceStateメソッドの「必ずしも」はペアで呼び出され、onRestoreInstanceStateが呼び出される前提は、Activityが確かにシステムによって破棄されたことである.

    3.Activity優先度:

  • フロントActivity:ユーザーと対話中のActivityで、最も優先度が高い.
  • フロント以外のActivity:Activityでダイアログボックスが表示されます.Activityは表示されますが、ユーザーと対話できません.
  • バックグラウンドActivity:onStopが実行されたなど、一時停止されたActivityの優先度が最も低い.

  • 優先度が低いほどシステムによって破棄される可能性があります.1つのプロセスに4つのコンポーネントが実行されていない場合、プロセスはすぐにシステムによって殺されるため、いくつかのバックグラウンド作業は4つのコンポーネントから離れてバックグラウンドで単独で実行するのに適していません(サービスで実行できます).

    4.Activityの起動モード:

  • standard:標準モードであり、システムのデフォルトモードでもあり、インスタンスが存在するかどうかにかかわらず、起動するたびに新しいインスタンスが再作成されます.
  • singleTop:スタックトップ多重モード、Activityがタスクスタックトップにある場合、Activityは再作成されず、onNewIntentメソッドがコールバックされ、Activityがスタックトップに存在するがスタックトップに存在しない場合、インスタンスが再作成されます.
  • singleTask:スタック内多重モードは、1つのインスタンスモードであり、Activityを複数回起動しても再作成されず、onNewIntentメソッドがコールバックされ、Activityタスクスタック上のすべてのActivity(clearTop効果)がクリアされます.singleTaskモードのActivityリクエストが起動すると、Activity Aのように、システムはまずAが存在するかどうかを探し、存在しない場合はまず1つのタスクスタックを作成し、次にインスタンスAを作成してタスクスタックに配置し、タスクスタックが存在する場合は、スタックにインスタンスAが存在するかどうかを判断し、存在する場合はAをタスクスタックのトップに調整し、AのonNewIntentをコールバックし、Aの上のすべてのActivityが除去され、存在しない場合、作成インスタンスAはタスクスタックに格納されます.
  • singleInstance:シングルインスタンスモードはsingleTaskの強化モードであり、このモードのActivityは1つのタスクスタックに単独で存在するしかなく、システムはそれのために1つのタスクスタックを単独で作成し、その後の要求は新しいActivityを作成しません.singInstanceとsingleTaskは、システム範囲内の「インスタンス一意」か、現在のActivityスタック「インスタンス一意」かを主に区別します.

  • 現在2つのタスクスタックがあり、フロントタスクスタックにAB(Bはスタックトップ)、バックグラウンドタスクスタックにCD(Dはスタックトップ、CD起動モードはsingleTask)があると仮定します.Dの起動が要求されると、バックグラウンド・タスク・スタック全体がフロントに切り替わり、戻るキーを押して後退する順序はABCD:ABCD->ABC->AB->Aです.Cの起動を要求すると、バックグラウンド・タスク・スタック全体がフロントに切り替わります.CはsingleTaskモードなのでDを突き出し、戻りキーを押して後退する順序はABC:ABC->AB->Aです.
    起動モードを指定するには、2つの方法があります.1.xml属性android:launchMode 2を使用する.コードを使うaddFlags().第2の態様は第1の態様よりも優先され、両方が存在する場合は第2の態様に準じて第1の態様はFLAG_を設定することができないACTIVITY_CLEAR_TOP ID、2つ目はsingleInstanceモードを設定できません.

    5.TaskAffinity

      Activity , , Activity 
     。TaskAffinity singleTask allowTaskReparenting :
    
  • TaskAffinityとsingleTask:開始するActivityはTaskAffinityと同じ名前のタスクスタックで実行されます.
  • TaskAffinityとallowTaskReparenting:アプリケーションAがアプリケーションBのActivityを起動した後、このallowTaskReparentingがtrueの場合、アプリケーションBが起動すると、このActivityはAのタスクスタックからアプリケーションBのタスクスタックに移行します.

  • 6.Intent常用FLAG

  • Intent.FLAG_ACTIVITY_NEW_TASK:効果はsingleTaskと同じ
  • FLAG_ACTIVITY_SINGLE_TOP:効果はsingleTopと同じ
  • FLAG_ACTIVITY_CLEAR_TOP:起動すると、同じタスクスタック内のすべてのActivityがスタックから削除されます.インスタンスにonNewIntentメソッドが呼び出されている場合、起動されたActivityモードがstandardの場合、それとそれ以上のactivityが削除され、スタックの上部に新しい作成インスタンスが追加された場合、singleTaskはデフォルトでこの識別ビット効果を使用します.
  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:このタグを持つActivityは履歴Activityリストには表示されません.場合によっては、android:excludeFromReents=「true」の設定に等しい履歴リストを介してユーザーがActivityに戻ることを望んでいない場合に便利です.

  • 7.IntentFilterの照合規則

    IntentFilter action、category、data , action、category、data 
     , Activity, Activity intent-filter, intent 
     Activity
    
  • actionマッチングルール:法則ルールのいずれかとマッチングできれば成功
  • categoryマッチングルール:Intentにcategoryがある場合、すべてのcategoryはフィルタルールのいずれかのcategoryと同じでなければならない.categoryがない場合、デフォルトのcategory、すなわちandroidである.intent.category.DEFAULTなので、Activityが暗黙的な呼び出しを受信できるように、複数のcategoryを構成する場合はデフォルトのcategoryを付けなければなりません.
  • data照合ルール:Intentにはdataデータが含まれている必要があり、dataデータはフィルタルールのいずれかのdataに完全に一致することができます.

  • Activityが私たちの暗黙的なIntentに一致するかどうかをどのように判断しますか?(1)PackageManagerのresolveActivityメソッドまたはIntentのresolveActivityメソッド:見つからない場合null(2)PackageManagerを返すqueryInentActivityメソッド:サービスやBroadcastReceiverなどのコンポーネントに対して一致したすべてのActivity情報を返します.PackageManagerは、queryInentServices、queryBroadcastReceiverなどのメソッドと同様に一致したコンポーネント情報を取得する方法を提供します.