0

InputMethodManager 保持对已销毁活动的软引用。以下是我的 HPROF 转储直方图。

  • android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper @ 0x43b7f768 本机堆栈
  • mInputConnection java.lang.ref.SoftReference @ 0x42b51da0
  • com.android.internal.widget.EditableInputConnection @ 0x43b7f738
  • mTextView, mTargetView android.support.v7.internal.widget.TintEditText @
  • mClipExMgr android.sec.clipboard.ClipboardExManager @ 0x434ee190
  • 我的活动

它可能是一个 EditText。我是否也需要在活动的 onDestroy 上删除视图上的侦听器?还是我应该忽略这个?

4

1 回答 1

1

听众通常不参考意见;课程的视图引用听众,听众引用封闭对象(通常是一个活动)。因此,当不再引用视图时,它们可能会被释放,然后,除非仍然被引用,否则侦听器可能会被释放,然后,除非仍然被引用,否则可能会释放封闭的活动或某物。因此,除非(它们引用视图从长期存在的数据结构中引用),否则无需删除侦听器。

如果一个活动引用了这些视图,它们可以一起被释放。所以再次不需要释放听众。

OTOH,请确保视图不会被必须超过视图寿命的对象引用。

并确保当活动离开屏幕时,活动创建的非静态可运行文件停止。引用了运行代码,因此引用了封闭实例(例如 Activity),因此引用了它引用的所有内容。

PS我希望你知道使用软引用的正确方法是:

MyActivity m = mySoftRef.get();
if (m != null) {
    doStuff(m.somefield);
}

并不是

if (mySoftRef.get() != null) {
    // NOTE: mySoftRef may get set to null at this point !!!
    doStuff(mySoftRef.get().somefield);
}
于 2015-02-04T11:39:42.897 回答