Bam*_*amx 5 android memory-leaks android-recyclerview
给定这样的适配器:
public class MyAdapter extends RecyclerView.Adapter {
private final Activity mActivity;
private final List<Item> mItemList;
public MyAdapter(Activity activity, List<Item> itemList) {
this.mActivity = activity;
this.mItemList = itemList;
}
//[...]
public void onBindViewHolder(ViewHolder holder, int position) {
final Item i = mItemList.get(position);
holder.launchButton.setOnClickListener(new OnClickListener() {
@Override public void onClick(View v) {
mActivity.startActivity(i.getIntent());
});
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,启动实例需要活动实例。当然,还有其他方法可以做到这一点(例如使用接口),但问题的关键是在适配器中保留对mActivity实例的硬引用是否安全
是的,很好。一旦没有从根对象强烈引用对象,Android的垃圾回收将回收对象。该适配器由RecyclerView引用,并且在释放该Activity之前,该RecyclerView将符合垃圾回收的条件,因此,在应回收该Activity时,该RecyclerView将符合垃圾回收的条件,因此不会阻止垃圾回收。从垃圾收集活动。同样,如果Activity引用了适配器,就好了,就像两个对象仅相互引用一样,它们不能从根对象访问,因此都可以进行垃圾回收。
| 归档时间: |
|
| 查看次数: |
1428 次 |
| 最近记录: |