web-dev-qa-db-ja.com

Activity.finishAffinity()vs Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK

Androidで、現在のActivityスタックをクリアして新しいActivityを起動する場合(たとえば、アプリからログアウトしてActivityでログを起動する場合)、 2つのアプローチのようです。

ターゲットAPIレベルが16を超えている場合、他に比べて利点はありますか?

1)アフィニティの終了

アクティビティからfinishAffinity()を呼び出します。 Activity.finishAffinity

2)インテントフラグ

_Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
_

finishAffinity()アプローチは、API = 16以上に適しています。

Intent flagsアプローチは、API 11以上に適しています。

明確にするために、現在のActivityスタックをクリアする目的で、両方のアプローチは同様に機能するように見えます。私の質問は、人々が経験した問題のいずれかであり、したがって、他のどちらかを選択する理由はありますか?

24
Craig Russell

機能的には違いはありませんが、これをGenyMotionでテストすると、わずかに視覚的な違いがあるように見えます。 Webキャストを参照してください: https://drive.google.com/file/d/0B8Y77sY7Y2CGRS02c3UyNjd2MGs/view?usp=sharing

さまざまなデバイスでそれを試して、どれだけ一貫性があるかを確認する必要があります。

主観的には、finishAffinity()を使用するといいでしょう。これはより明確だからです。ただし、<SDK 16をサポートする必要がある場合は、実際に選択肢はありません。

13
brindy

API> = 21の場合、次のコマンドを使用できます。

finishAndRemoveTask();

このタスクのすべてのアクティビティを終了し、最近のタスクリストから削除します。

https://developer.Android.com/reference/Android/app/ActivityManager.AppTask.html

0
Mike Yan

これを試して

Intent.FLAG_ACTIVITY_CLEAR_TOP

以前のアクティビティのスタックをクリアします

0