Я проверяю память, пытаясь найти возможные утечки памяти через дампы hprof.com.android.internal.policy.impl.PhoneLayoutInflater иногда остается в памяти (hprof dumps)
Я нахожу, что иногда, когда я оставляю активность через кнопку «Назад» (которая завершила бы действие), активность все равно останется в памяти, но она будет иметь только один корень GC, который не кажется очень «сильным» ' хоть.
Это моя активность потока/путь я нажимаю и тест:
A, B, C оздоровительная деятельность.
1) А -> В -> (обратно)
2) общего между HPROF дамп со следующим результатом:
B все еще находится в памяти, единственные элементы в GC корень B активности являются:
com.myapp.android.activity.directory.B
mContext из com.android.internal.policy.impl.PhoneLayoutInflater
mLayoutInflater из android.app.ContextImpl [Stack Local]
- [локальная переменная] Явы .lang.Thread [тема] "главный"
mOuterContext из android.app.ContextImpl [Stack Local]
- [локальная переменная] из java.lang.Thread [Тема] "главный"
(Thread «главный ", кажется, поток пользовательского интерфейса)
продолжают от А:
3) А -> с -> (BAC K к нему)
4) общего между HPROF дамп со следующим результатом (как ожидалось):
В не в памяти больше, С не в памяти больше, только
Теперь мой вопрос: , где этот PhoneLayoutInflater исходит из/почему он остается в памяти, когда я возвращаюсь из B в A, но он исчезнет после того, как отправится дальше на C и вернется обратно к A.
Очевидно, что PhoneLayoutInflater предназначен для раздувания представлений, я знаю о его цели. Я просто не понимаю, почему он будет храниться в памяти через корень GC из основного потока пользовательского интерфейса.
Когда я проверяю GC корни выше перечисленных
[локальная переменная] из java.lang.Thread [Thread] «главный
он будет иметь следующее:
- mUiThread of com.myapp.android.activity.main. A [Stack Local]
- ....
- это $ 0 из android.view.inputmethod.InputMethodManager $ ControlledInputConnectionWrapper [JNI Global]
- ....
Так я называю деятельность B и С из А осуществляется через регулярный startActivity(intent)
Почему основной поток пользовательских интерфейсов как-то связан и связан с активностью B?
http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html может быть уместным. – fadden
спасибо за ссылку, но я читал это уже много раз. нет ссылки на поток UI другого действия, также я не знаю, где «этот $ 0 ofroid.view.inputmethod.InputMethodManager $ ControlledInputConnectionWrapper [JNI Global]». Это странно. –
У меня такая же проблема с телефономLayoutInflater. Раньше я использовал рефлексию, чтобы вымыть такие причуды памяти в андроиде (как правило, связанные с списками), но я не знаю, что, черт возьми, вызывает это или то, что я мог бы отразить до нуля, не используя мое приложение. Собираемся добавить щедрость к этому. –