我有一个适配器,它使用活动上下文来注册和取消注册一个监听器。
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总是被调用,但是分离方法永远不会,所以即使在关闭活动之后,适配器也会泄漏大量内存。(在“设置”应用程序中只能显示运行)
我该怎么做?
答案 0 :(得分:1)
为安全起见,您可以在活动中注册接收器。你不应该在任何地方坚持活动参考...
如果您真的想从适配器注册接收器,请使用接口。
public interface Registerer {
void register();
void unregister();
}
活动:
mRecyclerView.setAdapter(new RecyclerAdapter(someDataSet,
new Registerer() {
public void register() {
registerReceiver(mReceiver, ...);
}
public void unRegister() {
unregisterReceiver(mReceiver);
}
});
然后您可以从适配器调用接口方法。我并没有真正看到将此填入视图适配器的重点。