0

Android でのタスク アフィニティの必要性を理解しようとしています。他のSOの回答も検索しました。

特に、singleTask 起動モードとタスク アフィニティの組み合わせに興味があります。

singleTask 起動モード (または NEW_TASK フラグを使用したインテント) の場合、システムは次の 3 つのアクションのいずれかを実行します。

  1. アクティビティが存在する場合は再開します
  2. アクティビティが存在しない場合は、アフィニティが一致するタスクを探してアクティビティを追加します
  3. 一致するタスクが見つからない場合、システムはこのアクティビティをルートとして新しいタスクを作成します

この回答から最初のケースの必要性を理解しています。複数の状態で同じアクティビティが発生すること、およびそれがユーザー エクスペリエンスに一貫性のない問題をどのように引き起こすかについて説明しています。

私がもっと困惑しているのは 2 番目のケースです。なぜシステムは同じアフィニティを持つ既存のタスクを見つける必要があるのでしょうか。この機能が許可されていない場合、これはどのようなユースケースを満たし、機能しなくなりますか? なぜ必要なのですか?

このリンクから:

... if the intent passed to startActivity() contains the
FLAG_ACTIVITY_NEW_TASK flag, the system looks for a different task to
house the new activity. Often, it's a new task. However, it doesn't have to be. 
If there's already an existing task with the same affinity as the new activity, the 
activity is launched into that task. If not, it begins a new task.

同じリンクで についても言及されていtask reparentingます。これは私が理解できない別の機能です。リンクは、天気/旅行アプリの例を示しています。

... suppose that an activity that reports weather conditions in selected cities 
is defined as part of a travel application. It has the same affinity as other 
activities in the same application (the default application affinity) and it allows 
re-parenting with this attribute. When one of your activities starts the weather 
reporter activity, it initially belongs to the same task as your activity. 
However, when the travel application's task comes to the foreground, the weather 
reporter activity is reassigned to that task and displayed within it.

この機能に対する私の質問は似ています。この機能が必要なユーザー エクスペリエンスの要件を満たすためのものなのか、それとも単なるタスクへの派手なアドオンなのか、私にはわかりません。タスク間でアクティビティの親を変更する必要があるのはなぜですか?

上記の2つの質問に答えるのを手伝ってもらえますか?

4

1 に答える 1

1

これを刺します!

Android/Google の意図は、ユーザーにとってシームレスな対話を実現することだったと思います。

アフィニティについて読んだとき、頭に浮かんだのは URL、電子メール、ドキュメントなどでした。特にインテントを処理できるアプリケーションの 1 つを既に開いている場合は、どのアプリケーションを開くかをユーザーに尋ねることは理にかなっていますか?

同じことがre-parenting にも当てはまります。タスクは別のアプリケーションを開きますが、ユーザーがそのタスクを終了して元のアプリケーションに戻りたい場合はどうなるでしょうか? ユーザーの観点では、そのエクスペリエンスを満たすために必要なアプリケーションの数に関係なく、それは 1 つのエクスペリエンスです。

(これについては、Android のマテリアル デザイン ドキュメントで読んだことを誓います....)

于 2015-08-20T21:11:06.470 に答える