2016-01-06 3 views
6

私のアプリでリークを把握しようとしていますが、これが原因であるかわかりません。InputMethodManagerのLeakCanaryレポートのリーク

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") 

それでもどうやら、このリークがAndroidExcludeRefであるが、まだ報告されているLeakCanary

にまで見せています。 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

このリークは無視できます。例えば

チェックこの問題:https://github.com/square/leakcanary/issues/256

+0

奇妙なことは私が無視すると私はこのような人を得る。いつもこのフラグメントから来ています – Marcel

+0

これはAndroidフレームワークのバグで、おそらく既に報告されています(そしてAndroidの次のリリースで修正されました)。だからあなたは問題について何かできないので、無視するべきです。 –

+0

私はそれを理解しましたが、私はこの1つを無視すると、ボタンのリスナーから新しいものを取得することが奇妙に感じています... – Marcel

0

LeakCanary Android OSの障害として、このリークを取るすでにあります。しかし、まだ起こっている、それは私に迷惑をかける。誰かがこれに入り込み、それを修正したい場合は、回避策があります。

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

ただ、はい、あなたはこのリークを無視することができますが、すべての後、漏れは、我々はいずれかを使用して修正しようとする必要があり、望ましくないシナリオである、あなたの活動ののonCreateにこの

IMMLeaks.fixFocusedViewLeak(getApplication()); 
1

を呼び出しますハックやトリック。すべてのバージョンのために動作する上記リーク用

エレガントな解決策は、here

+0

しかし、このソリューションは、最近のアプリケーションボタンが押されたとき、あなたのアプリの "スクリーンショット"を台無しにする副作用があります。アプリのスクリーンショットは、実際の画面の内容を表示するのではなく、空白の黒(または白)の画面として表示されます。これは、DummyActivityが完全に透過的であるにもかかわらずです。 –

関連する問題