4

問題はやや奇妙で、今から約1日それを理解しようとした後、ここに投稿します。アクティビティA(メインアクティビティ)が他のアクティビティ(B、C、またはD)を起動するアプリケーションがあります。ここでの問題は、アクティビティAがアクティビティBを開始し、「ホーム」ボタンが押されたときに発生します。

ケース1-「ホーム」ボタンを押した後、デバイス(HTC Desire)でアプリケーションをデバッグモードでテストすると、アプリケーションアイコンをもう一度クリックすると、同じアクティビティ(アクティビティB)に戻ります。これを実行する必要があります。 。ここでは問題はありません。

ケース2-署名されたパッケージをエクスポートし、同じデバイスにアプリケーションをインストールする場合、[ホーム]ボタンを押した後にアプリケーションアイコンをクリックすると、アクティビティA(メインアクティビティ)の新しいインスタンスがONTOPで起動されますそのアクティビティから「戻る」を押すと、アクティビティBに戻り、「戻る」を押すと、アクティビティAが再び表示されるため、これを知ることができました。

アプリケーションが開始されたのと同じ順序で終了した場合、つまり、アクティビティBから「戻る」を押してからアクティビティA(終了)から「戻る」を押すと、動作は存在しなくなります。

この後、すべてが正常に実行されます。さまざまな設定で何度もテストしましたが、なぜこのような動作になるのか理解できないようです。

どんな助けでも大歓迎です。

4

4 に答える 4

0

マニフェストでActivity Aに「シングルトップ」フラグを付けると、これが修正されるはずです。

于 2011-06-12T16:36:00.883 に答える
0

ケース 1 について: アクティビティ A からインテントを起動してアクティビティ B を開始する場合、フラグFLAG_ACTIVITY_CLEAR_WHEN_TASK_RESETを追加します。 これにより、ホームに戻ってアプリを再度起動したときに、アクティビティ A が表示されるようになります。

ケース 2 について: これがどのように発生するのか正確にはわかりません。署名済みと未署名の 2 つのバージョンのアプリがあると考えているようですが、両方を同じタスク スタックに保持しているようです。インスタンスが 1 つだけ必要な場合は、Activity に singleTask または singleInstance を使用することを検討してください。詳細については、タスクとバック スタックに関するドキュメントを参照してください。

于 2011-06-12T16:36:29.150 に答える
0

ケース 2 の考えられる原因については、ノエルに同意します。タスクの親を変更したり、アクティビティの複数のインスタンスを防止する起動モードに設定したりしないと、ホームからの起動が、からの起動と同じスタックと見なされない可能性があります。 Eclipse(これが当てはまると仮定)。

私の才能計算アプリでは、アプリケーション全体を allowTaskReparenting=true に設定して、他のスタックに何も残らないようにしています (起動 URL を電子メールで送信できるため、主に電子メールです)。次に、メイン アクティビティを launchMode="singleTask" に設定します。これは、起動の種類や意図に関係なく、このインスタンスを 1 つだけ存在させたいためです。

私の唯一の他のアクティビティは、読み込みと保存のためのもので、 noHistory="true" があり、削除されて戻らないことを確認しています。それは基本的に、あなたがその中にいる間だけ存在し、そこに戻ることはできないことを意味します.

また、clearTaskOnLaunch="true" は、ホームから起動されたときにメインのアクティビティのみがスタックに残ることを保証しますが、アクティビティに入る他の方法がある場合、これは常に当てはまるとは限りません。ホームからのみ起動する場合は、これを設定します。

すべてが役立つことを願っています。

于 2011-06-12T16:46:38.600 に答える
0

アプリケーションを手動で開始しますか、それとも Eclipse または別の IDE を使用しますか? Intellij IDEA から始めたとき、まったく同じ問題がありました。その後、停止して手動で実行したところ、動作は期待どおりでした。

于 2011-06-12T16:49:50.067 に答える