2

質問のタイトルにあるように、スタックの途中で現在一時停止モードになっているアクティビティを「削除」/破棄/終了するための最良の方法を知る必要があります(特定のインスタンスではなく、特定の派生クラス)。

例:
スタックの現在の状態が次のようになっている場合:

ActivityD   <-- top of the stack, currently forground
ActivityC
ActivityA
ActivityC
ActivityA

すべてのActivityCインスタンスを「クリア」するリクエストにより、スタックは次のようになります。

ActivityD  <-- still top of the stack, currently forground.
ActivityA
ActivityA

アクティビティ起動モードまたはインテントフラグに依存することはしたくありません。私はそれらの使い方とその利点を知っています。

私が現在できることは、破棄する必要のあるすべてのアクティビティがリッスンするブロードキャストを送信し、ブロードキャストを受信したときにActivity.finish()を呼び出すことです。
それは機能していますが、ホスティングアクティビティが一時停止している場合でも受信者を登録する必要があり、一時停止したアクティビティから「finish()」メソッドが呼び出されるのが正しいかどうかはわかりません。

再開されたアクティビティからActivity.finish()メソッドを呼び出すのは正しいですか?

受信者をOnCreate()メソッドに登録し、OnDestroy()の登録を解除するのは正しいですか?

再開されたアクティビティからのブロードキャストを処理し、その時点からfinish()を呼び出すのは正しいですか?

スタックからアクティビティをクリアするための「Androidの方法」または知らないAPIはありますか?

前もって感謝します

4

3 に答える 3

2

カスタム ブロードキャスト レシーバーを作成し、選択したイベントで起動できるすべてのアクティビティに登録します。すべてのアクティビティの onReceiveMethod で (選択可能)、finish() を呼び出すだけです。これで、アクティビティがスタックから削除されます。さらにヘルプが必要な場合は、これにアクセスしてください。 ログアウト時にアクティビティ履歴スタックをクリアし、「戻る」ボタンでログインのみのアクティビティが開かないようにします

于 2012-05-25T05:57:47.550 に答える
1

私も同じ問題を抱えていました。私がしたことは、静的配列リストを保持し、あるアクティビティから別のアクティビティに移動するたびに、新しいアクティビティの onCreate() メソッドで、現在のアクティビティのオブジェクトを次のようにそのリストに追加したことです。

SomeClass.addActivity(CurrentActivity.this);

上記のステートメントを各アクティビティに追加しました。

addActivity():

public void addActivity(final Activity activity) {
            activityList.add(activity);
        }

スタックをクリアしたいときは、次のように呼び出しました。

public boolean clearStack() {
        for (Activity activity : activityList) {
            activity.finish();
        }
        activityList.clear();
        return (activityList.isEmpty());
    }

このようにして、アクティビティ スタックをクリアしました。

ありがとうございました :)

于 2012-05-24T11:40:46.160 に答える
0
    Intent myintent = new Intent(YourCurrentActivity.this, YourNextActivitys.class);
    myintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(myintent);
    finish();

これまでのアクティビティをすべてクリアするには、これが正しい方法だと思います...

于 2012-05-25T05:44:42.597 に答える