Saya menggunakan LeakCanary untuk memeriksa kebocoran memori pada aplikasi saya, dan melaporkan kebocoran sebagai berikut: masukkan deskripsi gambar di sini

 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