2018年10月1日月曜日

再びEditTextのメモリリーク

こんにちは。

以前にもEditTextでメモリリークを発見し対応したのですが、その後のライブラリのアップデートで改善されていました。

参考記事:「メモリリーク その4 EditText

しかし、再び、別の原因によるEditTextのメモリリークが発生しました。

メモリリークが発生する場合と発生しない場合があり、しばらく気付かなかったため、どのライブラリから発生するのかは分かりません。

前回と同様、LeakCanaryで発見しました。

端末:Xperia performance
OS:Android 8.0.0

LeakCanaryより↓
In com.bnbnapp.bookshelf:3.13:3064.
* com.bnbnapp.bookshelf.ConditionActivity has leaked:
* GC ROOT static android.view.accessibility.AccessibilityNodeInfo.sPool
* references android.util.Pools$SynchronizedPool.mPool
* references array java.lang.Object[].[32]
* references android.view.accessibility.AccessibilityNodeInfo.mOriginalText
* references android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence.mSpanned
* references android.text.SpannableStringBuilder.mSpans
* references array java.lang.Object[].[0]
* references android.widget.TextView$ChangeWatcher.this$0
* references android.support.v7.widget.AppCompatEditText.mContext
* leaks com.bnbnapp.bookshelf.ConditionActivity instance
 
こちらの対応は以下。

上記対応すると以下のメモリリークを検出しました。

LeakCanaryより↓
In com.bnbnapp.bookshelf:3.13:3064.
* com.bnbnapp.bookshelf.ConditionActivity has leaked:
* GC ROOT static android.view.accessibility.AccessibilityNodeInfo.sPool
* references android.util.Pools$SynchronizedPool.mPool
* references array java.lang.Object[].[5]
* references android.view.accessibility.AccessibilityNodeInfo.mOriginalText
* references android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence.mSpanned
* references android.text.SpannableStringBuilder.mFilters
* references array android.text.InputFilter[].[0]
* references android.widget.Editor$UndoInputFilter.mEditor
* references android.widget.Editor.mProcessTextIntentActionsHandler
* references android.widget.Editor$ProcessTextIntentActionsHandler.mContext
* leaks com.bnbnapp.bookshelf.ConditionActivity instance
 
こちらの対応は以下。

以上で、メモリリークは検出されなくなりました。