2013-07-26 4 views
0

Вот история: я запускаю свое приложение из Eclipse и говорю, что он использует 20 МБ ОЗУ в диспетчере задач.
Затем я закрываю приложение, используя кнопку «Назад».
Я проверяю диспетчер задач и процессы, закрывающие мое приложение.
Теперь я снова запускаю свое приложение с телефона, но теперь он будет использовать 32 МБ.
Я закрываю приложение и запускаю его снова с телефона, и он будет использовать 45 МБ ОЗУ, и это будет продолжаться для каждого перезапуска.Память не отображается при закрытии приложения.

Он добавит ~ 12 МБ при каждом запуске.
Если я запустил приложение из Eclipse, он вернется к 20 МБ.

Я использую MyApp хранить некоторые не статические данные и SQLiteDatabase:

public class MyApp extends Application { 

} 

Я могу видеть, что даже если я закрываю мое приложение с задней БТН моей apllication будет оставаться в активных процессах.

ответ

1

Попробуйте позвонить android.os.Process.killProcess(android.os.Process.myPid()); на ваш основной вид деятельности onDestroy.

+0

Это работает, но не могли бы вы объяснить причину, почему это работает. – vovahost

+1

Android хранит некоторые данные/инструкции о вашем приложении, чтобы быстро запустить его, если он снова откроется с течением времени, с этой командой вы убедитесь, что инструкции и дополнительные данные не будут сохранены. –

+2

Это должно считаться последним средством! Реальная проблема - утечка памяти, и она должна быть исправлена. Единственный раз, когда мне нужно было использовать это, - это настраиваемые механизмы компоновки, которые имеют либо статические контексты, либо собственные представления openGL. – Phil

3

Необходимо использовать инструмент анализатора памяти Eclipse (MAT) - это, очевидно, утечка памяти. Вам нужно получить кучу дампа из DDMS, конвертировать его с помощью hprof-conv tool в sdk и загрузить его в MAT.

Проверьте this blog post на официальном блоге разработчиков Android.