私のアプリケーションには次のフローがあります。
ホーム->画面1->画面2->画面3->画面4->画面5>ホーム->画面2->ホーム->画面3
私の問題は、アプリケーションを閉じようとすると、アプリケーションを閉じようとするたびにホームアクティビティが開くことです。
ユーザーがホーム画面でデバイスの戻るキーを押したときにアプリケーションを閉じたいだけです。
現在のアクティビティとすべての親アクティビティを終了する finishAffinity() メソッドがありますが、Android 4.1以上でのみ動作します。
これは私にとってはうまくいきます。
_FLAG_ACTIVITY_CLEAR_TASK
_および_FLAG_ACTIVITY_NEW_TASK
_フラグを使用する必要があります。
_Intent intent = new Intent(SecondActivity.this, CloseActivity.class);
//Clear all activities and start new task
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
_
CloseActivity
アクティビティのonCreate()
メソッド。
_@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish(); // Exit
}
_
新しいアクティビティを開いている間にすべてのアクティビティをクリアするには、次の手順を実行します。
Intent intent = new Intent(getApplicationContext(), YourActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
いつかfinish()
が機能しない
私はその問題を解決しました
finishAffinity()
使ってはいけません
System.exit(0);
アニメーションなしでアプリを終了します。
現在のアクティビティとすべての親アクティビティを終了するfinishAffinity()
メソッドを使用します。ただし、API 16+
平均Android 4.1以降。
API 16以降の使用:
finishAffinity();
以下のAPI 16の使用:
ActivityCompat.finishAffinity(this); //with v4 support library
アプリ全体を終了するには:
finishAffinity(); // Close all activites
System.exit(0); // Releasing resources
これはすべてのバージョンでうまく機能します。次のように、以前のすべてのアクティビティを閉じます。
Intent intent = new Intent(this, HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // this will clear all the stack
intent.putExtra("Exit me", true);
startActivity(intent);
finish();
次に、HomeActivity onCreate()メソッドでこれを追加してMainActivityを終了します
setContentView(R.layout.main_layout);
if( getIntent().getBooleanExtra("Exit me", false)){
finish();
return; // add this to prevent from doing unnecessary stuffs
}
Intent.FLAG_ACTIVITY_CLEAR_TASKを使用して画面3を起動してみてください http://developer.Android.com/reference/Android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TASK
追加 Android:noHistory="true"
アクティビティマニフェストファイル内。
問題を解決するには2つの方法があります
1)すべてのアクティビティでstartActivity(intent)の後にfinish()を呼び出します
2)メニフェストファイルのすべてのタグにAndroid:launchMode = "singleInstance"を設定します
問題を解決するには2番目の方法が最適だと思いますが、最初の方法も使用できます
public void onBackPressed() {
super.onBackPressed();
finishAffinity();
System.exit(0);
}
この方法は、すべてのアクティビティを閉じてデバイスのメモリを消去するのに適しています。