私は多くの画像を持ち、動きの始めにセンサーマネージャーに登録したセンサーリスナーを使用して、揺れの方向に基づいて。センサーリスナーで大量の画像を使用するときのメモリ不足例外
私は私のアプリでそれを使用するためにonSensorChanged(SensorEvent event)
のイベント値を読み取る:
public void onSensorChanged(SensorEvent event){
accX = event.values[0];
accY = event.values[1];
accY = event.values[2];
}
を、私は活動の一時停止にセンサーリスナーの登録を解除しても、ガベージコレクションのためにSystem.gcを呼び出します。
私は1回の活動に入るまで、すべてうまく機能します。私は、現在の活動を終了し、(再びAAセンサーリスナーを持つ)別のアクティビティを開くと
、アプリはしばらく後にメモリ不足の例外与える始まり:
:
を「OutOfMemoryExceptionがビットマップのサイズ は、VMの予算を超えて」
アプリケーションのヒープサイズは決して4 MBを超えないことに注意してください。
センサーリスナーを使用しないとアプリケーションがクラッシュしないということがもう1つあります。これは、センサイベントが生成されたときや新しいアクティビティがロードされたときにメモリリークが発生している可能性がありますアクティビティでビットマップが使用されるときにOutOfMemoryExceptionが返されます。
だから、一見2つの理由:イメージが適切にリサイクルされていない
- http://code.google.com/p/android/issues/detail?id=8488
- アプリ Android: reading accelerometer without memory allocation? ために利用可能なメモリが減少SensorEventがあるたび、どこかでメモリリークがあります
私はここのコメント51に記載されているソリューションも使用しています: http://code.google.com/p/android/issues/detail?id=8488
すべてをリサイクルするにはまだメモリの問題があります。
大きなサイズのアプリで画像を使用する最良の方法を教えてもらうと、センサーリスナーを使用している間にリサイクルして実際にメモリリークがないかどうかを確認する方法や、アプリ、それは本当に役立つでしょう。