如何增加更快的recyclerView负载?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何增加更快的recyclerView负载?相关的知识,希望对你有一定的参考价值。
我正在使用recyclerview从我的服务器加载数据。没有图像只会从服务器加载文本。但加载速度非常慢。现在,我想知道是否有任何方法可以改善加载时间。虽然我检查了几个博客和问题但我无法解决我的问题。我检查过这个:Fast load RecyclerView withing ScrollView,但无法解决我的问题。
XML:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/swipe_layout"
tools:context=".Activities.SwitchCompany">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_margin="5dp"
android:id="@+id/companySwitchRecyclerViewXML"/>
</android.support.v4.widget.SwipeRefreshLayout>
Java:我的适配器类
public class RecyclerViewAdapterForCompanySwitch extends RecyclerView.Adapter<RecyclerViewAdapterForCompanySwitch.CompanyViewHolder> {
private Context context;
private ArrayList<CompanyModel> companyInformationArrayList;
public RecyclerViewAdapterForCompanySwitch(Context context,ArrayList<CompanyModel> companyInformationArrayList){
this.context=context;
this.companyInformationArrayList =companyInformationArrayList;
}
@Override
public CompanyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_row_style_for_switch_company_layout,parent,false);
RecyclerViewAdapterForCompanySwitch.CompanyViewHolder companyViewHolder=new RecyclerViewAdapterForCompanySwitch.CompanyViewHolder(view);
return companyViewHolder;
}
@Override
public void onBindViewHolder(@NonNull CompanyViewHolder holder, int position) {
final CompanyModel companyModel= companyInformationArrayList.get(position);
holder.companyName.setText(companyModel.getCompanyName());
holder.goButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.startActivity(new Intent(context, HomeActivity.class).putExtra("companyID",companyModel.getId()).putExtra("companyName",companyModel.getCompanyName())
.putExtra("companyEmail",companyModel.getEmail()));
}
});
}
@Override
public int getItemCount() {
return companyInformationArrayList.size();
}
public class CompanyViewHolder extends RecyclerView.ViewHolder{
TextView companyName;
Button goButton;
public CompanyViewHolder(View itemView) {
super(itemView);
companyName=itemView.findViewById(R.id.companyNameXML);
goButton=itemView.findViewById(R.id.goButtonXML);
}
}
}
我的recyclerview_row_style_for_switch_company_layout代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/layout_shadow"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Company Name"
android:textColor="@android:color/white"
android:background="@color/colorPrimary"
android:textStyle="bold"
android:gravity="center"
android:textSize="18sp"
android:padding="5dp"
android:layout_margin="5dp"
android:id="@+id/companyNameXML"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="#FFffffff"
android:textSize="18sp"
android:text="@string/buttontext"
android:id="@+id/goButtonXML"
android:textAllCaps="false"
android:layout_margin="5dp"
android:padding="5dp"/>
<View
style="@style/Divider"/>
</LinearLayout>
我假设您的回收站视图需要时间来收集数据。在单独的线程上收集数据并在后台异步运行并在完成后重新连接到Activity是很重要的。
具体来说,在后台运行查询,并在与查询关联的数据发生更改时自动重新运行查询。
异步代码完成后,您应该更新数据,而不是视图。更新数据后,告诉适配器数据已更改。 RecyclerView会记下这一点并刷新您的视图。
也许你可以试试Paging Library:https://developer.android.com/topic/libraries/architecture/paging
您的适配器实际上非常简单,它没有任何可能影响加载速度的陷阱。这尤其正确,因为您只是为一个TextView
设置文本并设置Button
的功能。
简单的TextView
和Button
也意味着你没有用于View的嵌套布局,这可能会影响初始膨胀布局时的性能。
因此,如果您仍然遇到缓慢的加载时间,我认为它应该与以下内容相关:
- 需要优化的服务器
- 数据网络速度
- 正在加载的数据量
由于第三个原因,如果您只是在RecyclerView
中显示数据并且让应用处理过多数据,那么这是可能的。
因此,分页库旨在帮助您以较小批量管理和获取大量数据,因为如果您一次只显示10个,则没有理由获取100。
以上是关于如何增加更快的recyclerView负载?的主要内容,如果未能解决你的问题,请参考以下文章
Android RecyclerView 设置item间隔的方法