Androidタスクアフィニティの説明


104

正確に何のtaskAffinityために使用される属性ですか?私が通過したドキュメントが、あまり理解できませんでした。

誰でも簡単にタスク親和性を説明できますか?


1
例を挙げた非常に良い説明は次のとおり
RanNachmany

私はこの答えが最良だと思います:stackoverflow.com/a/21383301/1318946
Pratik Butani

回答:


160

Androidタスクアフィニティの用途は何ですか?

Androidアプリケーションには、カードのデッキのようなスタックを形成するアクティビティがあります。Androidアプリケーションを開始し、5つのアクティビティA、B、C、D、Eを開始するとします。彼らはスタックを形成します

E   - chat view
D   - weather screen
C   - map view
B   - weather screen
A   - login screen

Eは開始された最後のアクティビティで、表示されています。Eを閉じるとDが表示されます。Dを閉じるとCが表示されます。等

アクティビティBDは同じアクティビティであることに注意してください。ユーザーがにいくつかの変更を加えD weather screen、その後アクティビティを閉じ、次にC Map view

次に、ユーザーは天気画面に戻り、levelで行われた変更がlevel D weather screenに保存されなかったため、ユーザーは不満を感じますB weather screen。これは同じアクティビティですが、そのアクティビティの異なる状態です。

ユーザーには5層のアクティビティスタックがあり、そのうちの2つは同じアクティビティでした。スタックから5つすべてをポップすると、同じアクティビティの2つの異なるバージョンを操作する現象が発生し、非常に混乱する可能性があります。

ユーザーは通常、厳密なアクティビティのスタックについて考えません。彼らは「天気予報ビューで変更を加えます」と考えてから、マップビューに戻りたいと考えています。ログイン画面に戻りたいので、もう一度バックアップします。なぜB weather app表示され、なぜレベルから設定を保存しなかったのDですか?

アクティビティーBD状態がリンクされていれば、プログラマーは多少の混乱を軽減できるかもしれません。そのように変化すると、一方が他方に変化します。ユーザーが新しい天気画面を開くたびに、天気画面の1つのインスタンスが密かに開かれます。

これらの状況では、アクティビティのtaskAffinityを変更することが望ましい場合があります。ユーザーはレベルDを変更します。次にレベルBに戻ります。Dに加えられたBの変更を確認します。

プログラムは、バックアップできるスタックを保持します。これは便利です。ユーザーが同じアクティビティのXインスタンスをランダムな場所で開いた場合、それらはすべて1つです。

詳細な説明のあるスライドショー:http : //www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack


13
を使用するsingleInstance代わりにを使用する場合はどうtaskAffinityですか?
hguser 2013年

5
上記のケースでは、Intent.FLAG_ACTIVITY_REORDER_TO_FRONTをIntent呼び出しアクティビティDのフラグとして使用することをお勧めします。これにより、アクティビティBが他のすべての上に置かれ、そのインスタンスが1つだけ保持されます
EyalBellisha

63
実は、この答えはほとんどに触れていないtaskAffinityすべての:-(説明が曖昧でアメージングを論文の答えは非常に多くのupvotesを取得していること。。
デビッド・ワッサー

5
長い回答ですが、単純な事実についてはまだ触れていませんtaskAffinity。これは、アクティビティが実行することを好むタスクの名前を指定するために使用されます。Intentにフラグが含まれている場合FLAG_ACTIVITY_NEW_TASK、アクティビティはこの特定のタスクに入れられます(によって定義taskAffinity)。
スタンモッツ2017年

2
Although it's the same activity, it's a different STATE of that activity.「それはその活動の別の例です」と私は言うでしょう。
マクシムドミトリエフ2017年

6

アフィニティは、アクティビティが所属することを好むタスクを示します。

アフィニティは、次の2つの状況で機能します。

アクティビティを起動するインテントにFLAG_ACTIVITY_NEW_TASKフラグが含まれている場合。

アクティビティのallowTaskReparenting属性が「true」に設定されている場合。

http://developer.android.com/guide/components/tasks-and-back-stack.htmlを参照してください


26
developer.android.comからコピーしていただきありがとうございます
Anirban、2018

これは何も説明しません。実際にはどういう意味ですか?
James Andrews、

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.