2013-11-08 3 views
3

I Привело мое приложение обратно в поле зрения через некоторое время, когда он сидел без дела в фоновом режиме, и я заметил, что он очень медленный, а затем просто не реагирует. Итак, я проверил logcat, и я вижу
«Недостаточно памяти при распределении по 557296 байтам». Последнее, что я сделал до того, как мое приложение простаивало, добавило несколько записей в пару таблиц в моей базе данных. Однако последняя строка моего логарифма перед ошибкой памяти имеет какое-то отношение к растровому изображению? ... «android.graphics.Bitmap.createBitmap». Я не уверен, как начать отслеживать это.Android: Недостаточно памяти на выделение байтов (android.graphics.Bitmap)

11-07 20:32:22.940: D/PMS(599): acquireWL(42e31570): PARTIAL_WAKE_LOCK CM_static 0x1 13857 10166 
    11-07 20:32:22.950: D/PMS(599): releaseWL(42e31570): PARTIAL_WAKE_LOCK CM_static 0x1 
    11-07 20:32:23.060: E/dalvikvm(16038): can't open /data/misc/app_oom.hprof: Permission denied 
    11-07 20:32:23.100: E/dalvikvm-heap(16038): hprofDumpHeap failed with result: -1 
    11-07 20:32:23.100: E/dalvikvm-heap(16038): After hprofDumpHeap for process 
    11-07 20:32:23.100: E/dalvikvm(16038): Out of memory: Heap Size=196608KB, Allocated=188196KB, Limit=196608KB, Proc Limit=196608KB 
    11-07 20:32:23.100: E/dalvikvm(16038): Extra info: Footprint=196512KB, Allowed Footprint=196608KB, Trimmed=2828KB 
    11-07 20:32:23.200: I/dalvikvm-heap(16038): Clamp target GC heap from 193.013MB to 192.000MB 
    11-07 20:32:23.200: I/dalvikvm-heap(16038): Forcing collection of SoftReferences for 557296-byte allocation 
    11-07 20:32:23.240: D/MtpDatabase(25526): sessionStarted 
    11-07 20:32:23.310: I/dalvikvm-heap(16038): Clamp target GC heap from 193.013MB to 192.000MB 
    11-07 20:32:23.310: E/dalvikvm-heap(16038): Out of memory on a 557296-byte allocation. 
    11-07 20:32:23.310: I/dalvikvm(16038): "main" prio=5 tid=1 RUNNABLE 
    11-07 20:32:23.310: I/dalvikvm(16038): | group="main" sCount=0 dsCount=0 obj=0x41f267e8 self=0x41f113b8 
    11-07 20:32:23.310: I/dalvikvm(16038): | sysTid=16038 nice=0 sched=0/0 cgrp=apps handle=1074839548 
    11-07 20:32:23.310: I/dalvikvm(16038): | state=R schedstat=(0 0 0) utm=61459 stm=7538 core=3 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.graphics.Bitmap.nativeCreate(Native Method) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.graphics.Bitmap.createBitmap(Bitmap.java:1041) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.graphics.Bitmap.createBitmap(Bitmap.java:983) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.View.buildDrawingCache(View.java:13312) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.View.getDrawingCache(View.java:13161) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.View.draw(View.java:13859) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewGroup.drawChild(ViewGroup.java:3105) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.widget.ListView.drawChild(ListView.java:3590) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2934) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.widget.AbsListView.dispatchDraw(AbsListView.java:2520) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.widget.ListView.dispatchDraw(ListView.java:3560) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.View.draw(View.java:14175) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.widget.AbsListView.draw(AbsListView.java:3993) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.View.draw(View.java:14053) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewGroup.drawChild(ViewGroup.java:3105) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2934) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.View.draw(View.java:14175) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.View.draw(View.java:14053) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewGroup.drawChild(ViewGroup.java:3105) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2934) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.View.draw(View.java:14051) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewGroup.drawChild(ViewGroup.java:3105) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2934) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.View.draw(View.java:14051) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewGroup.drawChild(ViewGroup.java:3105) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2934) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.View.draw(View.java:14175) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.widget.FrameLayout.draw(FrameLayout.java:467) 
    11-07 20:32:23.310: I/dalvikvm(16038): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2312) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2761) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewRootImpl.draw(ViewRootImpl.java:2674) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2491) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2048) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1119) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5849) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:786) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.Choreographer.doCallbacks(Choreographer.java:586) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.Choreographer.doFrame(Choreographer.java:546) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:771) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.os.Handler.handleCallback(Handler.java:730) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.os.Handler.dispatchMessage(Handler.java:92) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.os.Looper.loop(Looper.java:158) 
    11-07 20:32:23.310: I/dalvikvm(16038): at android.app.ActivityThread.main(ActivityThread.java:5789) 
    11-07 20:32:23.310: I/dalvikvm(16038): at java.lang.reflect.Method.invokeNative(Native Method) 
    11-07 20:32:23.310: I/dalvikvm(16038): at java.lang.reflect.Method.invoke(Method.java:525) 
    11-07 20:32:23.310: I/dalvikvm(16038): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 
    11-07 20:32:23.310: I/dalvikvm(16038): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:843) 
    11-07 20:32:23.310: I/dalvikvm(16038): at dalvik.system.NativeStart.main(Native Method) 
    11-07 20:32:23.310: E/dalvikvm-heap(16038): Generating hprof for process: com.test.myApp PID: 16038 
+0

Этот ответ по ссылке приводит к тому, что я обнаружил утечку памяти: [http://stackoverflow.com/questions/1147172/what-android-tools-and-methods-work-best-to-find-memory- ресурс-утечки] [1] [1]: http://stackoverflow.com/questions/1147172/what-android-tools-and-methods-work-best-to-find-memory-resource -leaks – Mike6679

ответ

7

Вы используете растровые изображения в своем приложении? Вы должны переработать растровые изображения с помощью bitmap.recycle(). Если вы не перерабатываете свои растровые изображения, вы рискуете исключение из памяти.

Если у вас есть растровые изображения я рекомендую делать это после того, как они используются:

bitmap.recycle(); 
bitmap = null; 

Это обеспечит точечный рисунок мусора.

Если у вас нет растровых изображений, я рекомендую использовать инструменты, представленные в DDMS to monitor heap size. Переведите устройство в режим сна и запишите изменения приложения. Я решил несколько исключений из памяти с помощью этих инструментов, и я надеюсь, что вы сможете это сделать.

+0

Спасибо, ты указал мне в правильном направлении, и я нашел это: http://stackoverflow.com/questions/1147172/what-android-tools-and-methods-work-best-to-find-memory-resource -. См. Ответ: «Одной из наиболее распространенных ошибок, которые я обнаружил при разработке приложений для Android, является ошибка« java.lang.OutOfMemoryError: Bitmap Size Exceeds VM Budget ». У меня такое ощущение, что это может быть моей проблемой. – Mike6679

+0

После дальнейших исследований по этому вопросу, я думаю, что мой последний комментарий неверен. Я не хочу просто разбираться с симптомами моей проблемы, но получить корень моей проблемы, которая представляет собой один или несколько утечек памяти. Эта ссылка здесь: http://stackoverflow.com/questions/12041297/android-tools-to-find-memory-leaks имеет дело с тем, как отслеживать утечки памяти в Android и как их избежать. – Mike6679

Смежные вопросы