0

すべてのフレームを個別のビットマップとしてメモリにロードし、スレッドループを使用してそれらをに割り当てることにより、gifをアニメーション化するアプリがありますimageViews

imageViewsフラグメント上にあり、フラグメントはにロードされますpageViewer。ページビューアのオフスクリーン制限を1に設定したので、一度に処理できるフラグメント/GIFは最大で3つです。

2.1のエミュレータでは、3つのgifがすべて同時にメモリにある場合、このエラーが発生します。

11-25 17:28:34.269: E/dalvikvm-heap(524): 292000-byte external allocation too large for this process.
11-25 17:28:34.269: E/(524): VM won't let us allocate 292000 bytes

2.3.3でも同じエラーが発生しますが、4.0.3エミュレーターまたは4.0.4を実行しているギャラクシータブ10.1では発生しません。これら2つは正常に実行され、かなり高速です。

1024x999 3.2MB gifを読み込もうとしましたが、4.0.3エミュレーターでさえ失敗しましたが、タブレットがgifの読み込みを停止するまで、それでも多数のgifを表示できました。アプリは約250〜300MBのRAMを使用しました。

では、実際のデバイスがどのように機能するかを予測する方法はありますか?より高いAPIバージョンをターゲットにする必要がありますか?

4

1 に答える 1

1

非常に多くのビットマップをロードするときは、非常に注意する必要があります。必要なメモリ量を簡単に超えることができます。限られたデバイスを使用していることを忘れないでください。無制限のリソースが可能な限りメモリ効率を高めようとすることを期待しないでください

android devサイトからベストプラクティスについて学ぶと、問題を解決できる可能性が非常に高くなります。

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

それを読んでください、あなたがあなたの問題を解決するのを助けるべきです。

于 2012-11-26T18:38:13.647 に答える