2

アクティビティを開始し、既存のアクティビティで finish() を呼び出さないと、既存のアクティビティがスタックに保持され、戻るボタンを押すと新しいアクティビティに移動し、前のアクティビティに戻ります。

その意味は、finish() と呼ばれていない以前のすべてのアクティビティがメモリ (スタック) に残ることを意味します。

ここでの問題は、すべてのアクティビティに対して終了を呼び出したくないということです。スタック内の最後の 3 つのアクティビティのみを保持し、残りのアクティビティを削除するように定義できる集中化された場所はありますか?

4

3 に答える 3

7

[activity] タグの Android マニフェストでは、android:noHistory を指定できます - ユーザーがアクティビティから離れて移動しなくなったときに、アクティビティをアクティビティ スタックから削除して終了する (finish() メソッドが呼び出される) かどうか。画面に表示 — 終了する必要がある場合は「true」、そうでない場合は「false」。デフォルト値は「false」です。「true」の値は、アクティビティが履歴トレースを残さないことを意味します。タスクのアクティビティ スタックには残らないため、ユーザーはそこに戻ることができません。この属性は、API レベル 3 で導入されました。

于 2009-12-29T06:28:18.437 に答える
1

アクティビティに解決される新しいインテントを起動するときは、適切なインテント フラグを設定することを検討してください。そのようなフラグのリストは、こちらにあります。これらのフラグを使用して、履歴スタックのアクティビティを並べ替えたり、クリアしたりすることもできます。これについては、Activity and Task ガイドラインのドキュメント(こちらを参照) に優れた説明があります。

または、Android マニフェストとも呼ばれる展開記述子で、アクティビティに適切な属性を設定します (問題には noHistory が適しています)。詳しくはこちらをご覧ください。

于 2009-12-29T10:15:52.960 に答える
0

メモリの使用量を心配しているようですが、気にする必要はありません。Android がこれらすべてを処理します。

アクティビティの 1 つが別のアクティビティに覆われているため、ユーザーから見えなくなった場合、アクティビティは停止します。停止したアクティビティはすべての状態を保持する必要がありますが、メモリが必要になったときにシステムによって強制終了される可能性があります。これが、システムによって自動的に強制終了および再起動された後にアクティビティが状態を回復できるように、メソッドonStop()とメソッドを実装する必要がある理由です。onRestart()

詳細については、Android 開発者ドキュメントの Android Fundamentals ドキュメントでコンポーネントのライフサイクルについて読むことができます。

于 2009-12-29T08:40:14.753 に答える