0

次のようにアクティビティを開始するサービスがあります(たとえばActivity A):

        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
        getApplicationContext().startActivity(intent);

アプリを起動すると、Activity A代わりにアプリの最初のアクティビティの前に表示されます。

これを回避するには2つの解決策がありました:

1)

上記のコードを次のように変更します。

        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
                | Intent.FLAG_ACTIVITY_NEW_TASK);
        getApplicationContext().startActivity(intent);

問題:

アクティビティを起動してホームキーを押した後も、履歴スタック (= recent tasks) にアクティビティが表示されます。どうして?

アプリを起動すると、2 つのタスクが 1 つに統合され、アプリの最初のアクティビティが一番上に表示されます。しかし、それ以外のアプリでは、新しいタスクを作成し、Activity A残りのタスクを作成します。どうして?

2) 上記のコードを次のように変更します。

        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
                | Intent.FLAG_ACTIVITY_NEW_TASK);
        getApplicationContext().startActivity(intent);

マニフェストに次を追加します。

   <activity
        android:name="org.achartengine.GraphicalActivity"
        android:taskAffinity="org.achartengine"
        >

ここでActivity A= android:name="org.achartengine.GraphicalActivity"

問題: 不要なタスク スタックが保持されます。

サービスからその活動を始める人は少ないと思います。それでも、彼らはそれを一度だけ行います。つまり、ユーザーがホーム/戻るキーをクリックしたときに、履歴スタックからアクティビティを消去する方が適切です。

どのオプションが優先されますか? (または別のもの?)

4

2 に答える 2

1

簡単な修正は、android:launchMode="singleTop" をマニフェストのアクティビティに追加することです。これにより、複数のインスタンスではなく 1 つのみになります。同じことを達成するもう 1 つの方法は、インテントを開始する直前に次を使用することです。

Intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

マニフェストプットで試す可能性は他にもいくつかあります

android:noHistory="true"

そして、あなたが電話していることを確認してください

finish();

その意図を終わらせるために。

アクティビティまたはこれら 2 つのインテント フラグの組み合わせ

Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP

上記がうまくいかない場合、私が最後に考えることができるのは

moveTaskToBack(true);

これは問題を解決しません。

お役に立てれば。

于 2013-07-31T04:10:19.280 に答える
0

これは、最初のアクティビティをスタックから除外するメソッドです。

        Thread nohistory = new Thread () {
        public void run () {
            try {
                Intent i = new Intent(Splash.this, ActivitySplash.class);
                i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(i);
                finish();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
    nohistory.start();
于 2013-08-02T14:26:05.003 に答える