34

App-BがApp-Aを起動する2つのアプリがあります。ユーザーがAppAIの内側からAppBを開始した場合、App-Aで終了するので、問題はありません。

ユーザーがアプリケーションドロワーからアプリBに直接移動するか、ホームボタンを長押しすると、以下を実装します。これにより、すべての追加機能を適用する前に、まずアプリAのタスクがクリアされます。これには望ましい効果がありますが、API 11でのみ機能します。下位のAPIでは、APP-Aの新しいタスクは変更されず、追加のputExtraは効果がありません。に代わるものはありFLAG_ACTIVITY_CLEAR_TASKますか?API <= 10の場合?

        Intent i = new Intent("com.App-A");
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

ありがとう

ジェイソン

4

6 に答える 6

15

新しいIntentCompatはこれに役立つはずですが、11 未満の API ではフラグが無視されるようです。

IntentCompat を使用するには、次の手順を実行します。

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
于 2014-06-06T18:53:06.883 に答える
2

これは正しく機能します

i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY | 
               Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
于 2012-12-11T09:04:13.753 に答える
1

聞き間違いかもしれませんが、Bを発射するときはAを殺してほしいということですか?

A で、これをマニフェストのアクティビティ タグに追加します。

android:noHistory=true

これにより、アクティビティがフォーカスを失うとすぐにメモリから削除されます。

于 2012-11-01T09:11:08.137 に答える
1

これらのインテント フラグについて私が見つけた最良のドキュメントは次のとおりです

あなたが何をしようとしているのか理解できませんが、試してみましたFLAG_ACTIVITY_CLEAR_WHEN_TASK_RESETか?

于 2012-09-29T00:23:26.617 に答える
0

私はまだ問題を理解するのに苦労していますが、あなたがそれを解決するのを手伝いたいと思います. コメントは 600 文字しか使用できず、形式も適切ではないため、代わりに回答を作成します。一緒に解決できると確信しているためです。

あなたの問題を再現できるようにしたいと思います。そのために、 AppAAppBという 2 つのアプリケーションを作成しました。AppA には という 1 つのアクティビティがActivityAあり、AppB には という 1 つのアクティビティがありますActivityB。との両方ActivityAActivityB使用しますandroid:launchMode="singleTask"

ActivityA次のように、AppB を起動して終了するボタンがあります。

    Intent intent = new Intent("de.sharpmind.example.AppB");
    intent.putExtra("extra", "launched from AppA");
    startActivity(intent);
    finish();

ActivityB次のように AppA を起動するボタンがあります。

    Intent intent = new Intent("de.sharpmind.example.AppA");
    intent.putExtra("extra", "launched from AppB");
    startActivity(intent);

これはすべて、期待どおりに機能します。AppA と AppB は異なるタスクで実行されます。「おまけ」はonCreate()各アプリのメソッドにちゃんと見られます。

それでは、あなたの問題について詳しく教えてください。どうすれば問題を正確に再現できますか? あなたが書いた:

下位の API では、APP-A の新しいタスクは変更されず、extras putExtra は効果がありません。

それはどういう意味ですか?エクストラをどこに配置し、どこで入手し、何が起こると予想していますか?

また、あなたの は何launchModeですかAppB?

また、この問題が発生した場合、AppA のタスク スタックに他のアクティビティはありますか?

元の質問またはここにコメントとして詳細情報を提供してください。

于 2012-09-26T14:43:39.457 に答える
0

を使用FLAG_ACTIVITY_CLEAR_TASKすると、バック スタックがクリアされます。私が正しく理解していれば、これはあなたが望む動作です。

マニフェストでsingleInstance代わりに使用すると、これが行われます。singleTask

コメントで、あなたはそうでなければならないと言いましたsingleTask。これは、特定の状況でバックスタックが必要になるためだと思います。

launchModeプログラムで変更できずFLAG_ACTIVITY_CLEAR_TASK、API <=10 では使用できないため、2 つの同一のアクティビティを作成する必要がある場合があります 。

1launchMode=singleTaskつと 1 つlaunchMode=singleInstance

singleInstanceこれを、アプリ ドロワーから起動したときにクリア スタックを取得するために使用するものに追加します。

 <category android:name="android.intent.category.LAUNCHER" />
于 2012-10-22T01:00:46.710 に答える