web-dev-qa-db-ja.com

すべてのアクティビティを終了してAndroidでアプリケーションを閉じる方法は?

私のアプリケーションには次のフローがあります。

ホーム->画面1->画面2->画面3->画面4->画面5>ホーム->画面2->ホーム->画面3

私の問題は、アプリケーションを閉じようとすると、アプリケーションを閉じようとするたびにホームアクティビティが開くことです。

ユーザーがホーム画面でデバイスの戻るキーを押したときにアプリケーションを閉じたいだけです。

20
rahul

現在のアクティビティとすべての親アクティビティを終了する finishAffinity() メソッドがありますが、Android 4.1以上でのみ動作します。

73
Ragaisis

これは私にとってはうまくいきます。

  • _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 
    }
    _
15
Loi Ho

新しいアクティビティを開いている間にすべてのアクティビティをクリアするには、次の手順を実行します。

Intent intent = new Intent(getApplicationContext(), YourActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
2

いつかfinish()が機能しない

私はその問題を解決しました

finishAffinity()

使ってはいけません

System.exit(0);

アニメーションなしでアプリを終了します。

2
AJay

現在のアクティビティとすべての親アクティビティを終了する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
2
Hasib Akter

これはすべてのバージョンでうまく機能します。次のように、以前のすべてのアクティビティを閉じます。

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
}
2
Lazy Ninja

Intent.FLAG_ACTIVITY_CLEAR_TASKを使用して画面3を起動してみてください http://developer.Android.com/reference/Android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TASK

1
iago

追加 Android:noHistory="true"アクティビティマニフェストファイル内。

0
Siddharth_Vyas

問題を解決するには2つの方法があります

1)すべてのアクティビティでstartActivity(intent)の後にfinish()を呼び出します

2)メニフェストファイルのすべてのタグにAndroid:launchMode = "singleInstance"を設定します

問題を解決するには2番目の方法が最適だと思いますが、最初の方法も使用できます

0
Mitul Gedeeya
public void onBackPressed() {
    super.onBackPressed();
    finishAffinity();
    System.exit(0);
}

この方法は、すべてのアクティビティを閉じてデバイスのメモリを消去するのに適しています。

0
Gökhan Aydın