私は、1つのAndroidアプリのメモリが16MBに制限されていると読んだことがあります(一部のデバイスの方が高くなる可能性があります)。だから、それはネットワークからのいくつかのデータ(画像など)の読み込みには真実です。Androidのメモリ制限テストの問題?
私の仮想デバイス(Android用のVisual Studioエミュレータ)では、メモリの制限は約46MBです。私はOutOfMemoryExceptionを投げる前に読み込むことができるイメージの数が46イメージ(各イメージは約1MBのサイズを持つため)だと思います。
最初は、画像がImageViews(ListViewまたはRecyclerViewの項目にラップされている)に表示されている場合のみ、メモリが超過する可能性があると考えました。しかし、ロードされた画像が表示されているかどうかに関わらず、例外はスローされます(出力ウィンドウで見ることができます)。
私は、List<int>
のような項目の数が約13 000 000(46MBを超えるはずです)のようなローカルリストをロードするなど、OutOfMemoryExceptionを再現したいと考えています。ただし、例外はスローされません。私は130 000 000にアイテムの数を増やしてみましたが、まだ同じ例外が投げられません。ここにコードです:
//the local list is declared inside my main Activity class
List<int> _ints = new List<int>();
for(var i = 0; i < 130000000; i++) {
_ints.Add(i);
}
私は間違った方法でOutOfMemoryExceptionの原因を理解しているようです。あなたはこれを私に説明するか、可能であればOutOfMemoryExceptionを再現するためのコード例や提案を与えてもらえますが、ネットワークから何かをダウンロードすることには関係しません。できるだけシンプルに保つことを意味します。
ありがとうございました!
あなたの説明は私にとって理にかなっていますが、これはここで最善の答えと思われますので、すぐにそれを受け入れます。ありがとうございました :)。ところで、私の実際の問題は、多くの画像を読み込むことです。しかし、私はそれらをすべて表示する必要はありません。現在のところ、問題は十分な画像を表示した後(リストをスクロールすることによって)、次の画像(継続的なスコリングによる)は表示されません(メモリがいっぱいであるとは思わない)。イメージローダーライブラリを使用しようとしたことはありません。問題をよりよく理解するために、これを最初に解決したいからです。もしあなたがこの解決策に関する提案があれば、本当に感謝します:) – Hopeless
xamarinのドキュメントへのリンクが追加されました。ところで、例外はどこで起こりますか?ビットマップ割り当てになっていますか? – bwt
私は実際にはわかりませんが、画像が表示されないスクロールの位置では、出力で「OutOfMemoryException'のようなメッセージを見ることができます。しかし、ヒープメモリをデバッグしようとすると、画像が大きく異なった点で表示されてしまうのは奇妙です(1点は約123MB、もう1点は約85MBです)。実際には画像はロードされません(私はasync/awaitを使用しています)。だから私は問題がメモリの制限ではないかもしれないと思うようになります。 – Hopeless