Я внедряю SensorEventListner
в свою деятельность.
У меня есть три действия, которые SensorEventListner
выполняет, чтобы обнаружить дрожание. Во всех трех видах деятельности я регистрирую sensorListner onCreate
и отменяю регистрацию listner onPause
. При вызове каждого действия оно регистрируется снова, а затем `отменяет регистрацию в OnPause.
Мое приложение выделило размер кучи как 3,6 МБ, в то время как размер кучи устройства составляет 16 МБ, но при этом принудительно закрывается с ошибкой в LogCat как:
«OutOfMemoryException: размер растрового изображения превышает бюджет виртуальной машины»
РЕДАКТИРОВАТЬ: Logcat ошибка
06-13 15:47:35.056: ERROR/AndroidRuntime(10377): Uncaught handler: thread main exiting due to uncaught exception
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:464)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:340)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at android.content.res.Resources.loadDrawable(Resources.java:1705)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at android.content.res.Resources.getDrawable(Resources.java:580)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at android.widget.ImageView.resolveUri(ImageView.java:548)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at android.widget.ImageView.setImageResource(ImageView.java:270)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at com.nga.flashcards.activities.GardenActivity.display(GardenActivity.java:1024)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at com.nga.flashcards.activities.GardenActivity.onSensorChanged(GardenActivity.java:1352)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at android.hardware.SensorManager$ListenerDelegate$1.handleMessage(SensorManager.java:435)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at android.os.Handler.dispatchMessage(Handler.java:99)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at android.os.Looper.loop(Looper.java:123)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at android.app.ActivityThread.main(ActivityThread.java:4595)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at java.lang.reflect.Method.invokeNative(Native Method)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at java.lang.reflect.Method.invoke(Method.java:521)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-13 15:47:35.196: ERROR/AndroidRuntime(10377): at dalvik.system.NativeStart.main(Native Method)
У меня также есть большое количество изображений и их изменение в просмотре изображений с помощью setImageResource (). Получение ошибки при использовании SensorEventListner. Если событие датчика не используется в приложении, то работает нормально.
Мои вопросы:
Есть ли какие-либо проблемы с памятью при повторной регистрации и отмене регистрации слушателя в приложении?
Есть ли утечки памяти, если да, то как их обнаружить и как можно решить проблему?