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
スタックをクリアする目的で、両方のアプローチは同様に機能するように見えます。私の質問は、人々が経験した問題のいずれかであり、したがって、他のどちらかを選択する理由はありますか?
機能的には違いはありませんが、これをGenyMotionでテストすると、わずかに視覚的な違いがあるように見えます。 Webキャストを参照してください: https://drive.google.com/file/d/0B8Y77sY7Y2CGRS02c3UyNjd2MGs/view?usp=sharing
さまざまなデバイスでそれを試して、どれだけ一貫性があるかを確認する必要があります。
主観的には、finishAffinity()
を使用するといいでしょう。これはより明確だからです。ただし、<SDK 16をサポートする必要がある場合は、実際に選択肢はありません。
API> = 21の場合、次のコマンドを使用できます。
finishAndRemoveTask();
このタスクのすべてのアクティビティを終了し、最近のタスクリストから削除します。
https://developer.Android.com/reference/Android/app/ActivityManager.AppTask.html
これを試して
Intent.FLAG_ACTIVITY_CLEAR_TOP
以前のアクティビティのスタックをクリアします