【发布时间】:2016-04-21 22:43:04
【问题描述】:
我有一个适配器,它使用活动上下文来注册和注销监听器。
Activity mActivity;
MyBroadcastReceiver mReceiver;
@Override
public void onAttachedToRecyclerView (RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
mActivity.registerReceiver(mReceiver, ...);
}
@Override
public void onDetachedFromRecyclerView (RecyclerView recyclerView) {
super.onDetachedFromRecyclerView(recyclerView);
mActivity.unregisterReceiver(mReceiver);
mActivity = null;
}
虽然 onAttachedToRecyclerView 总是会被调用,但 detach 方法永远不会,所以即使在关闭 Activity 之后适配器也会泄漏大量内存。(运行仅在设置应用程序中可见)
我该怎么办?
【问题讨论】:
-
为了安全起见,您可以在 Activity 中注册接收器。您真的不应该在任何地方都持有 Activity 引用。
标签: java android memory-leaks adapter android-recyclerview