質問: 無限の活動計画 私のアプリケーションでは、無限の活動スタックを持つ能力があります。このシナリオでは、あるユーザーのページから開始し、そのユーザーの「友人」であるユーザーの一覧が表示されます。友人をクリックするとページに移動し、前のページと同じように表示され、別の友人をクリックしてページに移動することができます。 私が直面している大きな問題は、無限のネイティブヒープです。私はビューが膨らんだたびにこのヒープに追加すると信じています。これを数回繰り返した後、私は一貫してOOMエラーが発生するため、何らかの解決方法を見つけなければなりません。トリックは、私はいくつかの歴史をナビゲートするための最小限の最後のいくつかの活動を維持したいです。 私が思いつくことができる最高ののは、アクティビティスタックを監視して、特定のポイントに達するとアクティビティを開始することです。それは堅実なアプローチのように聞こえるのでしょうか、それとも誰かが私にそのアプローチや別のアプローチの実装を指摘することはできますか? ありがとう 編集: スタックは非常に簡単です。リスト(友人)をクリックし、そのページに移動します。これは、通常のstartActivity呼び出しを使用して、同じページへのインテントと、ユーザーIDを持つインテントを追加し、データベースまたはリモートAPIコールを呼び出してユーザーのデータを取得します。 また、Dalvik vs Nativeについてフォローアップするために、私はナビゲーション中にmeminfoダンプを定期的にチェックしています。私は、dalvikヒープを可能な限り小さく保ち、onStopでリソースをクリーンアップしています。ネイティブヒープははるかに速く成長します。私はどこでもビットマップへのハードリファレンスはありませんが、膨らみから画面上にかなりのドロアブルがあります。これらのドロアブルは、アンドロイドが私の活動を最終的に殺すようになるのでしょうか?私の活動が予防的に破壊されることなく、彼らがOOMにつながると私は最高に感じる。 私が手動で活動を止めるのではなく、手動で活動を破壊することができれば(Androidのメモリが不足しているとアンドロイドが主張しているように)、保存された状態でスタックに破壊された活動を保存することが理想的です。 もう一度編集: 別の鍵は、これらの活動には、他の活動が混在していることです。 user -> user -> activity a -> user -> activity b -> user だから私は組み込みのスタックを利用したいので、いつ私がユーザーのアクティビティに行く必要があるのか、そうでない時を知っています。
回答: 私はあなたが経験しているOOMの問題があなたが開いているアクティビティの数に関係しているとは思わない。 Androidは、メモリ使用量が増えるほど、バックグラウンドで古いアクティビティを破壊するはずです。これらのアクティビティは、ユーザーがタスクスタックに戻ったときに再作成されます。 MAT(メモリアナライザツール)のようなツールを使用して、アプリケーションの実行時に割り当てた内容を調べましたか。私は、あなたがメモリリークを持っている可能性があります、またはあなたのメモリ割り当てでよりスマートにする必要があるかもしれないと思う。