無限の活動計画

私のアプリケーションでは、無限の活動スタックを持つ能力があります。このシナリオでは、あるユーザーのページから開始し、そのユーザーの「友人」であるユーザーの一覧が表示されます。友人をクリックするとページに移動し、前のページと同じように表示され、別の友人をクリックしてページに移動することができます。

私が直面している大きな問題は、無限のネイティブヒープです。私はビューが膨らんだたびにこのヒープに追加すると信じています。これを数回繰り返した後、私は一貫してOOMエラーが発生するため、何らかの解決方法を見つけなければなりません。トリックは、私はいくつかの歴史をナビゲートするための最小限の最後のいくつかの活動を維持したいです。

私が思いつくことができる最高ののは、アクティビティスタックを監視して、特定のポイントに達するとアクティビティを開始することです。それは堅実なアプローチのように聞こえるのでしょうか、それとも誰かが私にそのアプローチや別のアプローチの実装を指摘することはできますか?

ありがとう

編集:

スタックは非常に簡単です。リスト(友人)をクリックし、そのページに移動します。これは、通常のstartActivity呼び出しを使用して、同じページへのインテントと、ユーザーIDを持つインテントを追加し、データベースまたはリモートAPIコールを呼び出してユーザーのデータを取得します。

また、Dalvik vs Nativeについてフォローアップするために、私はナビゲーション中にmeminfoダンプを定期的にチェックしています。私は、dalvikヒープを可能な限り小さく保ち、onStopでリソースをクリーンアップしています。ネイティブヒープははるかに速く成長します。私はどこでもビットマップへのハードリファレンスはありませんが、膨らみから画面上にかなりのドロアブルがあります。これらのドロアブルは、アンドロイドが私の活動を最終的に殺すようになるのでしょうか?私の活動が予防的に破壊されることなく、彼らがOOMにつながると私は最高に感じる。

私が手動で活動を止めるのではなく、手動で活動を破壊することができれば(Androidのメモリが不足しているとアンドロイドが主張しているように)、保存された状態でスタックに破壊された活動を保存することが理想的です。

もう一度編集:

別の鍵は、これらの活動には、他の活動が混在していることです。

user -> user -> activity a -> user -> activity b -> user

だから私は組み込みのスタックを利用したいので、いつ私がユーザーのアクティビティに行く必要があるのか​​、そうでない時を知っています。

0
追加された 編集された
ビュー: 3
どのように正確にユーザーページの "スタック"を実装していますか?
追加された 著者 josephus,

2 答え

このアクティビティを singleInstance にする方法、KeyEvent.KEYCODE_BACKを傍受する、このアクティビティの独自のバックボタンスタックを構築する方法

私はここでいくつかの例を作った:

http://esilo.pl/selvin/endlessactivity.zip

1
追加された
(同じソースから)新しいバージョンをダウンロードする...私は setIntent(intent);public void onNewIntent(Intent intent)に追加するのを忘れていたあなたはバックスタックを失うだろう)
追加された 著者 Selvin,
良いアイデア(とそのためのupvote)しかし、私のニーズはもう少し複雑です。私が言及することを怠ったのは、これらの活動には他の活動が混在していることです。
追加された 著者 Jonathan S.,

私はあなたが経験しているOOMの問題があなたが開いているアクティビティの数に関係しているとは思わない。 Androidは、メモリ使用量が増えるほど、バックグラウンドで古いアクティビティを破壊するはずです。これらのアクティビティは、ユーザーがタスクスタックに戻ったときに再作成されます。

MAT(メモリアナライザツール)のようなツールを使用して、アプリケーションの実行時に割り当てた内容を調べましたか。私は、あなたがメモリリークを持っている可能性があります、またはあなたのメモリ割り当てでよりスマートにする必要があるかもしれないと思う。

0
追加された
まあ、私はネイティブとdalvikの両方がGCが実行されるまで上がると思っています。あなたのメモリのほとんどがネイティブ側に割り当てられている場合、私はDalvikがそれに反応しないというあなたの仮定に正しいと思います。ネイティブ側で大部分の作業をしているようです。スタック内の次のアクティビティに移動するときにonStopがアクティビティに対して呼び出される必要があるため、クリーンアップが適切に機能しているかどうか確認してください。
追加された 著者 Justin Breitfeller,
そうです、NDKが本当に私の専門知識の外にあるので、あなたがあなたの質問の中でDalvikでネイティブにVSをやっていることについてもっと投稿すると、他の人にもっと役立つかもしれません。私はあなたがあなたの活動からそれらをどのようにアンバインドするかについて非常に注意していない限り、アクティビティ間にドロアブルを維持しようとすべきではないことを知っています。この問題については、android-developers.blogspot.com/2009/01/avoiding-memory-leak‌ s.htmlを参照してください。
追加された 著者 Justin Breitfeller,
私はMATを使用しており、リソースの解放についてもかなり注意しています。ネイバーとダルビクの両方が上に行くほど、meminfoダンプを見ることができます。ネイティブヒープ問題のためにシステムがアクティビティを終了させますか?私はそれが別々だと思った...
追加された 著者 Jonathan S.,
私のクリーンアップは機能していますが、十分に徹底していないかもしれません。私はリストをクリアし、行を取り除くためにリサイクルビンを一覧表示しますが、他のビューはそのままです。つまり、リストの外にあるすべてのものがそのドロアブル(ボタン、背景、ヘッダーイメージなど)を保持します。私はこれがネイティブヒープがちょうどそこに座っているこれらのドロアブルを膨らませるたびに上昇し続ける理由だと思う。だから、私はそれを見ているように私はすべての私の意見を殺す(過剰殺戮のように思える)か、私の活動の大きさを規制しなければならない。私の元々のヒープに何があったのか分かると、私はもっと自信があります。
追加された 著者 Jonathan S.,