1

A、B、C、D のようなビューがほとんどない Android アプリケーションを開発しています。ここで D は私のホーム アクティビティです。私のナビゲーションは、A->B->C->D のようなものです。アクティビティ D に到達したら、[戻る] ボタンを押しようとすると、以前のすべてのアクティビティ (A、B、C) が閉じます。新しいアクティビティの呼び出しと呼ばれる終了のようなアクティビティを開始できません。アプリケーションのアクティビティを強制終了する方法を教えてください。

ここでは、いくつかのコードを使用してすべてのアクティビティを終了しましたが、結果は得られませんでした。

ActivityManager manager =  (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> list = manager.getRunningAppProcesses();

if(list != null)
{
    for(int i=0;i<list.size();++i) {
        if(getApplicationContext().getPackageName().matches(list.get(i).processName)) {
            int pid = android.os.Process.getUidForName(getApplicationContext().getPackageName());
            android.os.Process.killProcess(pid);
        } 
        else {
            debug.log("app not killed");
        }
    }
}

一度にすべてのアクティビティを閉じる適切な方法を教えてください。

よろしくお願いします

4

7 に答える 7

3

終了するには:

   Activity_name.this.finish();

そして殺すために:

  android.os.Process.killProcess(android.os.Process.myPid());
于 2013-09-04T12:04:35.567 に答える
1

これは、次の 2 つの方法で行うことができます。

  1. アクティビティ A から B アクティビティを開始すると、この方法でインテントにフラグを設定できます

    Intent i = new Intent(A.this, B.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    startActivity(i);
    

BからCへ、CからDへと同じことを行います

また

  1. アクティビティコールを開始した後finish()

これにより、アクティビティ B が開始され、アクティビティ A が終了します。したがって、[戻る] をクリックしても、アクティビティ A には戻りません。

    Intent i= new Intent(A.this, B.class);
    startActivity(i);
    finish();
于 2013-01-07T15:50:45.293 に答える
0

onPause()Activity_D の に のようなフラグを設定しますpublic static boolean kill = true;

アクティビティ A、B、C でonResume()kill をチェックしてから呼び出すfinish();

onResume() {
    super.onResume();
    if(Activity_D.kill) {
        finish();
    }
}
于 2013-01-07T14:46:54.667 に答える
0

私の質問に答えてくれてありがとう。最後に、私の問題の解決策を得ました。インテント Intent.FLAG_ACTIVITY_CLEAR_TOP を使用して解決しました。これが私のシナリオの説明です。アクティビティ D にいるとします。実際のフローは A->B->C->Di で、以前のアクティビティ A、B、C を削除したいと考えています。以前は、アクティビティ D から移動するときに最初のアクティビティ A を呼び出していました。したがって、アクティビティ A を呼び出すためにインテント FLAG_ACTIVITY_CLEAR_TOP を追加しました。したがって、中間のアクティビティはクリアされ、アクティビティ A のみが表示されます。アクティビティ A. このように

Intent intent = new Intent(D.this,A.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.putExtra("finishstatus", true);
                this.startActivity(intent);
                this.finish();

アクティビティAのonCreateメソッドでバンドル値をチェックしています

bundle = this.getIntent().getExtras();
        if(bundle!= null)
        {
            boolean isActivityToBeFinish = this.getIntent().getExtras().getBoolean("finishstatus");
            if(isActivityToBeFinish)
            {
                finish();
                }
    }

ステータス値が利用可能で、それが true の場合、アクティビティ A も終了しています。だから私の問題は解決され、以前のすべての活動を無事に終えています。

私の説明は良くないかもしれませんが、完璧に動作します。

于 2013-01-08T10:29:25.827 に答える
0

同じ問題に対する私の回避策:

アクティビティ スタックと public static clearAll メソッドを使用してシングルトンを宣言し、スタックを反復してすべてのアクティビティを終了します。

次に、Activity を拡張する StackedActivity を宣言します。これは、アプリのすべてのアクティビティで使用されます。

StackedActivity の onCreate メソッドではスタック シングルトンにインスタンスを追加し、すべて終了したい場合は clearAll メソッドを呼び出すだけです。

于 2013-01-07T15:56:33.443 に答える
0

完全にアプリケーションを終了するには

アプリケーションを再開したくない場所から launcher-Activity または MainActivity にいると思います

1.マニフェストでアクティビティを終了します 2.android:excludeFromRecents="true"

于 2014-10-14T06:35:23.600 に答える