2016-01-06 7 views
6

Я пытаюсь понять утечку в моем приложении, но я не уверен, что это произошло.Утечка утечки утечки в InputMethodManager

LeakCanary говорит мне, что я могу игнорировать его. Это правильно?

01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * LEAK CAN BE IGNORED. 
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * com.mypackage.ui.map.MapComponentFragment has leaked: 
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * GC ROOT android.view.inputmethod.InputMethodManager$1.this$0 (anonymous class extends com.android.internal.view.IInputMethodClient$Stub) 
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * references android.view.inputmethod.InputMethodManager.mCurRootView 
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * references com.android.internal.policy.impl.PhoneWindow$DecorView.mContext 
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * references com.mypackage.ui.MainActivity.mFragments 
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * references android.app.FragmentManagerImpl.mAdded 
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * references java.util.ArrayList.array 
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * references array java.lang.Object[].[0] 
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * leaks com.mypackage.ui.map.MapComponentFragment instance 
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * Reference Key: 0790f013-1c87-4d5f-8c10-db277187e3ce 
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * Device: samsung samsung SM-N910C treltexx 
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * Android Version: 5.1.1 API: 22 LeakCanary: 1.4-SNAPSHOT 2714152 
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * Durations: watch=5085ms, gc=149ms, heap dump=2562ms, analysis=10313ms 

Было обнаружено несколько утечек, вызванных этим фрагментом, но я их исправлю. Этот я не могу заставить его исчезнуть.

Любой ключ?

EDIT

Еще одна вещь, если я хочу, чтобы его игнорировать это должно быть достаточно?

.instanceField("android.view.inputmethod.InputMethodManager", "mCurRootView") 

Но все еще показывает в LeakCanary

Видимо, это утечка в AndroidExcludeRef, но по-прежнему сообщается. https://github.com/square/leakcanary/issues/322

+0

Существуют различные решения или обходные пути: https://issuetracker.google.com/issues/37043700#comment17 https://issuetracker.google .com/issues/36950938 https://stackoverflow.com/questions/5038158/main-activity-is-not-garbage-collected –

ответ

2

Yup, вы можете игнорировать эту утечку.

Проверьте, например, этот вопрос: https://github.com/square/leakcanary/issues/256

+0

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

+0

Это ошибка из фреймворка Android и, вероятно, уже сообщается (и исправлена ​​в следующих выпусках Android). Поэтому вы не можете что-то сделать с этой проблемой, поэтому вам следует игнорировать ее. –

+0

Я понял это, но все же чувствую себя странно, что, когда я игнорирую этот, я получаю новый от слушателя в одной кнопке ... – Marcel

0

LeakCanary уже принимают эту утечку, как неисправность Android OS. Но все еще случалось, что меня раздражало. Если кто-то попадает в это и хочет его исправить, есть обходной путь.

https://gist.github.com/pyricau/4df64341cc978a7de414

Просто позвоните на OnCreate вашей деятельности это

IMMLeaks.fixFocusedViewLeak(getApplication()); 
1

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

Элегантное решение для выше утечки, которая будет работать для всех версий here

+0

Но это решение имеет побочный эффект испортить «скриншот» вашего приложения, когда нажата кнопка «Последние приложения». Снимок экрана вашего приложения будет отображаться как пустой черный (или белый) экран вместо того, чтобы показывать фактическое содержимое экрана. Это несмотря на то, что DummyActivity полностью прозрачна. –