Saya menggunakan LeakCanary untuk memeriksa kebocoran memori pada aplikasi saya, dan melaporkan kebocoran sebagai berikut:
public AutofitHelper setEnabled(boolean enabled) {
if (mEnabled != enabled) {
mEnabled = enabled;
if (enabled) {
mTextView.addTextChangedListener(mTextWatcher);
mTextView.addOnLayoutChangeListener(mOnLayoutChangeListener);
autofit();
} else {
android.util.Log.i("linlian","AutofitHelper.setEnabled()remove="+mTextView);
mTextView.removeTextChangedListener(mTextWatcher);
mTextView.removeOnLayoutChangeListener(mOnLayoutChangeListener);
mTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
}
}
return this;
}
Kode memanggil setEnable(true)
untuk menambahkan addTextChangedListener
untuk TextView dan saya telah menambahkan setEnable(false)
ke removeTextChangedListener
, tapi ini tidak cukup, ada referensi TextLine.sCached
statis, bagaimana caranya lepaskan sCashed
.
Cuplikan kode berikut yang saya temukan di TextLine
static TextLine recycle(TextLine tl) {
tl.mText = null;
tl.mPaint = null;
tl.mDirections = null;
tl.mMetricAffectingSpanSpanSet.recycle();
tl.mCharacterStyleSpanSet.recycle();
tl.mReplacementSpanSpanSet.recycle();
synchronized(sCached) {
for (int i = 0; i < sCached.length; ++i) {
if (sCached[i] == null) {
sCached[i] = tl;
break;
}
}
}
return null;
}
Tetapi, bagaimana cara menggunakannya dengan benar untuk mendaur ulang sCashed
statis?
1
lynn8570
22 Mei 2015, 07:00
1 menjawab
Jawaban Terbaik
Saya menemukan topik terkait Kebocoran memori Android pada tampilan teks a>
Utils.clearTextLineCache() mungkin merupakan solusi yang baik.
0
Community
23 Mei 2017, 14:59