gpt4 book ai didi

java - 从 recyclerview 打开多个 Activity 会导致应用程序滞后

转载 作者:太空宇宙 更新时间:2023-11-04 09:05:09 25 4
gpt4 key购买 nike

我的应用程序运行良好,没有任何延迟。不过,我有一个回收 View ,它打开一个包含项目详细信息的新 Activity 。因此,假设 Activity A 有 recyclerview 并且它打开 Activity B。如果用户打开 Activity B 并执行 onBackpressed 并重复此过程,则整个应用程序开始滞后。基本上,导致应用程序滞后的交互流程是:A ->B ->A -> B ...(如果用户执行此操作超过 10 次,应用程序几乎无法使用)。我尝试过泄漏金丝雀,但它没有报告任何内存泄漏。还要检查 android 配置文件,唯一增加的内存是 native 内存。

在适配器中,除了绑定(bind)方法之外,我在 onBindViewHolder 上没有任何内容。 on click方法是通过接口(interface)实现的。

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());
}
}

Activity A 的 on Click 监听器:

@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 发送无代码事件,它们被分配在内存中,直到 Activity A 完成(就我而言)为止才释放。希望这对某人有帮助。

关于java - 从 recyclerview 打开多个 Activity 会导致应用程序滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60298968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com