我的应用程序运行正常,没有任何滞后。但是,我有一个recyclerview,它可以打开一个包含项目详细信息的新活动。假设活动A具有recyclerview并打开了活动B。如果用户打开活动B并执行onBackpressed并重复此过程,则整个应用程序开始滞后。基本上,导致应用程序滞后的交互流为:A-> B-> A-> B ...(如果用户执行此操作超过10次,则该应用程序几乎变得不可用)。我曾尝试过泄漏金丝雀,但它没有报告任何内存泄漏。还检查android配置文件,唯一增加的内存是本机内存。
在适配器中,除了bind方法之外,在onBindViewHolder上我什么也没有。通过接口实现点击方法。
public class ElementsAdapter extends RecyclerView.Adapter<ElementsAdapter.ElementsViewHolder> implements Filterable {
private final LayoutInflater inflater;
private ElementsRecyclerItemClickListener recyclerItemClickListener;
private List<Elements> elements;
private List<Elements> filteredElements;
public boolean isSearchRequestFiler = false;
ElementsAdapter(Context context) {
this.inflater = LayoutInflater.from(context);
}
@Override
public ElementsAdapter.ElementsViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
return new ElementsAdapter.ElementsViewHolder(RowElementsBinding.inflate(inflater, parent, false));
}
@Override
public void onBindViewHolder(final ElementsAdapter.ElementsViewHolder holder, final int position) {
holder.bind(filteredElements.get(position));
}
@Override
public void onViewRecycled(ElementsAdapter.ElementsViewHolder viewHolder) {
super.onViewRecycled(viewHolder);
}
@Override
public int getItemCount() {
return filteredElements == null ? 0 : filteredElements.size();
}
Elements getItemAt(int position) {
return filteredElements.get(position);
}
void setRecyclerItemClickListener(ElementsRecyclerItemClickListener elementClickListener) {
this.recyclerItemClickListener = recyclerItemClickListener;
}
void setElements(final List<Elements> elements) {
this.elements = elements;
this.filteredElements = elements;
notifyDataSetChanged();
}
class ElementsViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
final RowElementsBinding binding;
ElementsViewHolder(RowElementsBinding binding) {
super(binding.getRoot());
this.binding = binding;
this.binding.getRoot().setOnClickListener(this);
}
public void bind(Element element) {
binding.setElement(element);
binding.executePendingBindings();
}
@Override
public void onClick(View view) {
if (recyclerItemClickListener != null)
recyclerItemClickListener.onElementClickListener(getAdapterPosition());
}
}
活动A上的点击监听器:
@Override
public void onElementClickListener(int position) {
Intent intent = new Intent(ActivityA.this, ActivityB.class);
intent.putExtra("ELEMENTS_ID", adapter.getItemAt(position).getId());
intent.putExtra("ELEMENTS_OPENED_FROM", "ACTIVITY_A");
startActivity(intent);
}
任何帮助,将不胜感激
在尝试了许多事情并进行了大量测试之后,我发现出现延迟的原因是facebook sdk(要解决此问题,我从5.0.0。降级为4.41.0)。因此,facebook发送无代码事件,并且将它们分配在内存中,直到我完成活动A之前才释放它们。希望这对某人有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句