Android–taskAffinity属性



Android Taskaffinity Attribute



  • すべてのアクティビティには taskAffinity 属性。この属性は、入力するタスクを示します。アクティビティがアクティビティのtaskAffinityを明示的に示さない場合、そのプロパティはアプリケーションによって指定されたtaskAffinityと等しくなります。アプリケーションが指定されていない場合、taskAffinityの値はパッケージ名と同じです。タスクには独自のアフィニティ属性もあり、ルートアクティビティのtaskAffinityの値と同じ値になります。
  • taskAffinityは、アクティビティが変更される親タスクの2つを決定します(を参照)。 allowTaskReparenting
    属性)および渡された FLAG_ACTIVITY_NEW_TASK フラグは、アクティビティの開始時にタスクを保持するために使用されます。
    最初のケース:
    アクティビティのallowTaskReparentingがtrueに設定されている場合、バックグラウンドに入ります。同じ親和性を持つタスクがフォアグラウンドに入ると、タスクは再ホストされ、フォアグラウンドのタスクに入ります。
    確認:
    2つのプロジェクトapplication1とapplication2を作成します
    application1にはActivity1が含まれ、application2にはActivity2が含まれ、それらのtaskAffinityは同じであり、Activity1のallowTaskReparentingはtrueです。
 

application1を起動し、Activity1をロードし、ホームボタンを押してタスク(task1と想定)をバックグラウンドに入力します。次に、application2を起動します。デフォルトでアクティビティがロードされますが、アクティビティ1がロードされます。実際にはActivity2もロードされていますが、Activityが再ホストされているため、Activity1が表示されます。
2番目のケース:
アクティビティのインテントをロードし、フラグがFLAG_ACTIVITY_NEW_TASKに設定されている場合、最初に同じtaskAffinityを持つタスクがあるかどうかがチェックされます。存在する場合は、タスクで直接ホストされます。タスクが存在しない場合は、タスクを再作成します。

launchModeとtaskAffinityの組み合わせ:

taskAffinityと組み合わせたSingleTaskロードモード

アプリケーションがsingleTaskモードでアクティビティをロードすると、アクティビティは最初に同じtaskAffinityを持つタスクがあるかどうかを確認します。



  1. 存在する場合は、インスタンス化されているかどうかを確認します。インスタンス化されている場合は、アクティビティの上にあるアクティビティを破棄し、onNewIntentを呼び出します。インスタンス化されていない場合、アクティビティのインスタンス化はスタックにマージされます。
  2. 存在しない場合は、タスクを再作成してスタックにマージします。

taskAffinityと組み合わせたsingleInstanceロードモード

  1. アプリケーションがsingleInstanceモードのアクティビティをロードするときに、アクティビティがインスタンス化されていない場合、タスクが再作成され、スタックにマージされます。インスタンス化されている場合、アクティビティのonNewIntentが呼び出されます。
  2. singleInstanceのアクティビティのタスクは、他のアクティビティに存在することはできません。アクティビティからロードされた他のアクティビティ(Activity2と想定)は、他のタスクに配置されます。 Activity2と同じ親和性を持つタスクがある場合は、タスクにActivity2を作成します。 。存在しない場合は、新しいタスクをスタックに再生成します。