android - Android Fragment 中的内存泄漏
问题描述
当我打开第一个片段时,我的应用程序中存在内存泄漏。这是我的应用程序中的适配器:
public class card_Adapter extends RecyclerView.Adapter<card_Adapter.myViewHolder> {
Context mcontext;
List<card_item> mData;
public card_Adapter(Context mcontext, List<card_item> mlist) {
this.mcontext = mcontext;
this.mData = mData;
}
@Override
public myViewHolder onCreateViewHolder( ViewGroup viewGroup, int i) {
LayoutInflater inflater=LayoutInflater.from(mcontext);
View view= inflater.inflate(R.layout.card_itm,viewGroup, false);
return new myViewHolder(view);
}
@Override
public void onBindViewHolder( myViewHolder myViewHolder, int i) {
myViewHolder.background_img.setImageResource(mData.get(i).getBackground());
myViewHolder.profile_photo.setImageResource(mData.get(i).getProfilephotp());
myViewHolder.tv_name.setText(mData.get(i).getProfilename());
myViewHolder.tv_nbabout.setText(mData.get(i).getNbabout()+"Followers");
}
@Override
public int getItemCount() {
return mData.size();
}
public class myViewHolder extends RecyclerView.ViewHolder{
ImageView profile_photo,background_img;
TextView tv_name,tv_nbabout;
public myViewHolder( View itemView) {
super(itemView);
profile_photo=itemView.findViewById(R.id.profile_img);
background_img=itemView.findViewById(R.id.card_background);
tv_name=itemView.findViewById(R.id.card_name);
tv_nbabout=itemView.findViewById(R.id.card_about);
}
}
}
这是我发生内存泄漏的片段
public class Homefrag extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view =inflater.inflate(R.layout.frag_home, null);
Window window =getActivity().getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
RecyclerView recyclerView = view. findViewById(R.id.rv_list);
List<card_item> mlist = new ArrayList<>();
mlist.add(new card_item(R.drawable.ali_name,"ali",R.drawable.ali,2500));
mlist.add(new card_item(R.drawable.h_name,"ali",R.drawable.h_name,2500));
mlist.add(new card_item(R.drawable.kha,"ali",R.drawable.kha_name,2500));
mlist.add(new card_item(R.drawable.moh_name,"ali",R.drawable.moh,2500));
mlist.add(new card_item(R.drawable.sal,"ali",R.drawable.sal_name,2500));
card_Adapter card_adapter =new card_Adapter(getContext(),mlist);
recyclerView.setAdapter(card_adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
return view;
}
}
解决方案
不知道这是否与您的内存泄漏有关,但这似乎是一个错字。你有 this.mData = mData,但你可能应该有 this.mData = mlist。
public card_Adapter(Context mcontext, List<card_item> mlist) {
this.mcontext = mcontext;
this.mData = mData;
}
推荐阅读
- postgresql - 在 postgres 中加入带有未嵌套数组的表
- node.js - Using Promise and async together
- graphql - Access JSON chunk exported from Gatsby Static Query
- python - ZeroDivisionError: float division by zero?
- parsing - 如何在 Linux 日志上使用日志解析器(logpai)
- visual-studio-code - 如何让 VSCode 键绑定覆盖终端的键绑定?
- java - 从 splunk 源读取并写入主题 - 写入相同的记录。不拉最新记录
- angular - 如何在 Ionic 4 中使用 flag-icon-css?
- node.js - 如何允许无限制的发布请求 expressjs
- tensorflow - keras model.summary() 不显示所有模型层