11

問題と私の解決策をここに投稿することを考える前に、この動作を報告している人を見つけることができなかったので、この問題を抱えている他の人を助けることができました. 私たちのアプリは、ICS より前のデバイスでうまく機能しました。Galaxy Nexus と ICS エミュレーターでアプリをテストしたところ、次のような奇妙なプロセス クラッシュが発生しました。

dlmalloc でのヒープ メモリの破損

dlfree でのヒープ メモリの破損

シグナル 11 (SIGSEGV)、障害アドレス デッドボード

問題は、クラッシュがネイティブ空間で発生したため、直接影響を与える自己記述コードがなかったことです。多くの画像をリストで処理し、システムがそれらにビットマップを割り当てるため、頭に浮かんだ唯一のことは、ビットマップの処理が悪いことでした。私たちは Web でのすべてのベスト プラクティスに従い、bitmap.recycle(). とにかく、なんらかの理由で、アプリケーションが Android ICS 4.0 で頻繁にクラッシュしました。

4

2 に答える 2

22

いくつかの調査の後、私はへの呼び出しを削除しrecycle()、すべてがうまくいきました。ICS のガベージ コレクターは、ビットマップを正しくクリアしているようです。への呼び出しrecycle()により、システムはネイティブ領域のメモリの割り当てを解除しようとしましたが、メモリはシステムによって既にクリアされていました。どういうわけか不正なメモリ アクセスが発生し、システムがクラッシュしました。したがって、Android ICS 4.0 用にプログラミングしていて、これらの問題が発生している場合は、ビットマップを明示的にリサイクルせずに試してみることをお勧めします。

于 2011-12-08T12:23:42.273 に答える
0

ICS 以降に対してアプリをコンパイルする場合、シグナル 11 (SIGSEGV) エラーが発生するため、recycle を明示的に呼び出す必要はありません。

于 2012-03-03T11:31:16.397 に答える