2012-04-23 2 views
3

У меня возникла проблема с пользователем моих приложений на Galaxy Nexus. Это игра, которая довольно графически интенсивна, и по существу происходит то, что при переключении с активности на активность память постепенно заканчивается.Странная утечка памяти на Galaxy Nexus. Известны ли проблемы?

Это Galaxy Nexus с (насколько я знаю) Android 4.0.2. Выдержки из LogCat:

D/.GameViewActivity(3203): debug. ================================= 
D/.GameViewActivity(3203): debug.heap native: allocated 6.01MB of 8.95MB (0.04MB free) in [.GameViewActivity] 
D/.GameViewActivity(3203): debug.memory: allocated: 54.00MB of 64.00MB (14.00MB free) 
D/dalvikvm(3203): GC_EXPLICIT freed 366K, 28% free 40426K/55623K, paused 4ms+4ms 
D/dalvikvm(3203): GC_EXPLICIT freed 1K, 28% free 40425K/55623K, paused 1ms+4ms 

Через некоторое время (считанные минуты), это будет выглядеть следующим образом:

D/.MainActivity(3203): debug. ================================= 
D/.MainActivity(3203): debug.heap native: allocated 6.92MB of 11.36MB (0.18MB free) in [.MainActivity] 
D/.MainActivity(3203): debug.memory: allocated: 58.00MB of 64.00MB (1.00MB free) 
D/dalvikvm(3203): GC_EXPLICIT freed 297K, 4% free 58119K/60359K, paused 1ms+5ms 
D/dalvikvm(3203): GC_EXPLICIT freed 3K, 4% free 58116K/60359K, paused 1ms+5ms 
I/WindowManager(17943): createSurface Window{41fadf88 .MainActivity paused=false}: DRAW NOW PENDING 
D/OpenGLRenderer(3203): Flushing caches (mode 0) 
I/ActivityManager(17943): Displayed .MainActivity: +556ms (total +743ms) 
D/dalvikvm(17943): GC_FOR_ALLOC freed 823K, 14% free 24118K/27911K, paused 86ms 
D/.GameViewActivity(3203): debug. ================================= 
D/.GameViewActivity(3203): debug.heap native: allocated 6.95MB of 11.36MB (0.15MB free) in [.GameViewActivity] 
D/.GameViewActivity(3203): debug.memory: allocated: 58.00MB of 64.00MB (1.00MB free) 
D/dalvikvm(3203): GC_EXPLICIT freed 11K, 4% free 58488K/60359K, paused 2ms+5ms 
D/dalvikvm(3203): GC_EXPLICIT freed <1K, 4% free 58487K/60359K, paused 2ms+4ms 

с последующим грохотом и из памяти.

Теперь я привык к безнадежной системе управления памятью Android, что приводит к неизбежным сбоям в моих играх (это, безусловно, самая известная ошибка на панели управления Android, и не имеет значения, насколько строго я акцизирую память в приложении - графика + управление памятью Android = принудительное закрытие). Я использую только компоненты Android + SurfaceView, хотя и сильно сглажен/оформлен с использованием пользовательской графики.

Странная вещь, которая привлекает мое внимание этим, однако, является телефоном.

Теперь - во-первых - это Galaxy Nexus, так что в настоящий момент самый продвинутый телефон там, с самой доступной памятью для своих приложений. Очень странно, что этот телефон из всех тех, кто там есть, должен иметь такую ​​проблему.

Во-вторых, у меня есть тот же телефон - также работает 4.0.2 - и я использую его как свой основной тестовый телефон. Мой пользователь может заставить игру рухнуть буквально за несколько минут; когда я играю в игру, он может работать в течение нескольких часов и будет постоянно иметь 20-25 Мб свободной памяти.

В-третьих, это приложение работает на десятках тысяч телефонов ежедневно, поэтому я на 100% уверен, что у приложения нет есть какие-либо проблемы, которые могут вызвать такую ​​катастрофическую утечку памяти, которую видит мой пользователь.

Вкратце - я в тупике, полностью и полностью.

Любые мысли? Кто-нибудь здесь видел что-то подобное раньше? Известны ли проблемы с Galaxy Nexus, о которых я не слышал? Любые стратегии/вопросы/тесты. Я могу спросить этого пользователя, который может помочь выявить проблему здесь?

+1

Всегда есть одно устройство, которое ведет себя непредвиденно :) Если у пользователя есть некоторый опыт, возможно, он может выгрузить вам профиль памяти, чтобы вы могли посмотреть на распределения: http://android-developers.blogspot.de /2011/03/memory-analysis-for-android.html (или вы делаете это в [code] (http://developer.android.com/reference/android/os/Debug.html#dumpHprofData%28java.lang.String % 29)) – zapl

+0

Отправьте это как ответ, и я приму это. Отправляя пользователю тестовую версию, которая сбрасывала hprof, по крайней мере позволяла мне видеть, какие классы взорвались на его телефоне (куча классов активности), хотя я до сих пор не понимаю, почему это происходит на его телефоне, но не на моем. –

+0

Возможно, что-то вызвано различными настройками, такими как часовой пояс, язык или другие системные настройки. В настройках> Параметры Dev есть опция, которая что-то меняет что-то об управлении Activity, но я не знаю, что она делает tbh. – zapl

ответ

1

Если у пользователя есть некоторый опыт, возможно, он может сбросить вам профиль памяти, чтобы вы могли взглянуть на распределения.

Для получения некоторых инструкций см. http://android-developers.blogspot.de/2011/03/memory-analysis-for-android.html.

Вы также можете попытаться сбросить профиль памяти из своего приложения с помощью Debug#dumpHprofData() и попросить пользователей отправить вам этот файл.

+1

Не решила проблема, но сброс памяти в коде по крайней мере позволил мне получить представление о том, какие элементы взрываются на пользовательском телефоне. Надеюсь, еще несколько экспериментов могут указать на виновника. –