12

SOで少し読んで検索しましたが、現在のアクティビティスタックをクリアする方法が見つかりません。私のアプリのコンテキストは、バックグラウンド サービス/通知によって開始されるアクティビティです。

私のアプリで人のリストを整理できると想像してみてください。数時間前、あなたは"View" アクティビティで人物 Xを表示していましたが、それが現在スタックの一番上にあります。将来のある時点で、サービスがトリガーされ、ユーザー Yの新しい「通知」アクティビティがポップアップします。そこから、Y さんの詳細を編集できます。

このアクティビティを終了したときに、スタックをポップして人物 X を表示することは、ユーザー エクスペリエンスを混乱させることになります。理想的には、ユーザーが行っていたこと (メールなど) に戻るか、少なくとも私のアプリの家。

「通知」を開始しようとしましFLAG_ACTIVTY_NEW_TASKたが、それは役に立たないようです:タスクが終了すると、前のタスクに戻るだけです。私が欲しいのはFLAG_ACTIVITY_CLEAR_TASK、以前の SDK には存在しなかった Android 3 の new のようです。

それを達成するための提案はありますか?

4

3 に答える 3

20

全部殺せ

次を使用してそれを実現できますBroadcastReceivers

  • BaseActivity次のように作成します。

public class BaseActivity extends GuiceActivity {
    private KillReceiver mKillReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mKillReceiver = new KillReceiver();
        registerReceiver(mKillReceiver,
            IntentFilter.create("kill", "spartan!!!"));
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mKillReceiver);
    }
    private final class KillReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            finish();
        }
    }
}

  • あなたの活動がそれを拡張しBaseActivityます。
  • スタックをクリアしたいときはいつでも:

Intent intent = new Intent("kill");
intent.setType("spartan!!!");
sendBroadcast(intent);

于 2011-03-01T12:59:19.493 に答える
6

アプリのホームのインスタンスがスタックで実行されている場合、アクティビティ Y が終了すると、アプリのホームを ( を使用してstartActivity()) フラグで起動できますFLAG_ACTIVITY_CLEAR_TOP。既にスタック上にあるため、新しいインスタンスを作成する代わりに、アプリのホームに戻り、その上のスタックをクリアします。

于 2011-03-01T13:00:35.340 に答える
0

ArrayList を取得し、すべてのアクティビティ オブジェクトをすべてのアクティビティの oncreate() で arraylist に保存します。特定のアクティビティを終了したいときはいつでも、arraylist からそのアクティビティ インスタンスを取得して終了します。

于 2012-03-26T10:05:31.090 に答える