私のアプリケーションには3つの画像リソースがあります。 ImageViewにそれらのいずれかをロードして表示することはスムーズに行われます。 しかし、レイアウトから表示されたImageViewを削除すると、nullとなり、 新しい画像を追加すると、奇妙なことが起こります。古いビットマップ上画像処理でのプロセスクラッシュ(シグナル11)
完全にプロセスがクラッシュ(信号11)のいずれか私は 呼び出し.recycleを(試す)または私はリサイクルを使用していない 場合のOutOfMemoryErrorを取得します。
これは8未満のAPIレベルでのみ発生するので、ネイティブヒープの GCのバグがそれを引き起こしており、これらのバグは 2.2に修正されています。しかし、現在2.1が最も一般的なバージョンであるため、回避策が必要です。
また、ネイティブヒープのメモリが不足してはいけません。私は を一度に1つの画像しか保持していないので、GCは が(2.2で起こるような)ヒープスペースを検索できるはずです。
私はここ からダウンロードすることができ、非常に小さなサンプルアプリケーションを作成しました:任意の提案が理解されるであろう http://www.4shared.com/file/QqHrhJLR/BitmapRecycleTest.html
を。
私が投稿したサンプルアプリケーションは、この問題に遭遇したはるかに大きなアプリから派生した「最小限のコード再現」です。 大規模なアプリケーションでは、このクラスにもっと多くのロジックがあるので、BitmapResourceが必要です。ファイナライザの.recycle呼び出しはそこにあります。なぜなら私はリサイクルコールを明示的に呼び出すことができないので、多くのbmpがロードされアンロードされているからです。 しかし、あなたが提案した解決策は、私が掲示した問題を解決し、リサイクルコールを一掃し、System.gc()コールをいくつかの場所に広めることについて考えさせました。 ご協力いただきありがとうございます! – Roi