Android recyclerview RxAndroid网络调用使应用程序在后台导航时滞后
我的android应用程序在实现网络调用后在后台导航方面一直落后。对于网络调用,我使用rxandroid/Reformation。我试着用单一和可观察两种方法来修复它。两者都使应用程序以同样的方式滞后。这是我使用observable时的代码。将数据加载到recyclerviews时发生滞后。因此,我还添加了适配器类Android recyclerview RxAndroid网络调用使应用程序在后台导航时滞后,android-recyclerview,observable,retrofit,androidx,rx-android,Android Recyclerview,Observable,Retrofit,Androidx,Rx Android,我的android应用程序在实现网络调用后在后台导航方面一直落后。对于网络调用,我使用rxandroid/Reformation。我试着用单一和可观察两种方法来修复它。两者都使应用程序以同样的方式滞后。这是我使用observable时的代码。将数据加载到recyclerviews时发生滞后。因此,我还添加了适配器类 @Override public void onResume() { super.onResume(); getMenuByShopAndCa
@Override
public void onResume() {
super.onResume();
getMenuByShopAndCategoryId(categoryRequest.getId(), Utility.getShop(getActivity()));
}
private void getMenuByShopAndCategoryId(int categoryId, int shopId){
Repository.getInstance()
.getMenuByShopAndCategoryId(categoryId,shopId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Response<MenuResponse>>() {
@Override
public void onSubscribe(Disposable d) {
disposable.add(d);
}
@Override
public void onNext(Response<MenuResponse> menuResponse) {
//other calculations
}
}
@Override
public void onError(Throwable e) {
//error handling
}
@Override
public void onComplete() {
}
});
}
@Override
public void onDestroy() {
disposable.dispose();
super.onDestroy();
}
@覆盖
恢复时公开作废(){
super.onResume();
getMenuByShopAndCategoryId(categoryRequest.getId(),Utility.getShop(getActivity());
}
私有void getMenuByShopAndCategoryId(int categoryId,int shopId){
Repository.getInstance()
.getMenuByShopAndCategoryId(categoryId,shopId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新观察员){
@凌驾
认购的公共无效(一次性d){
一次性。添加(d);
}
@凌驾
public void onNext(响应菜单响应){
//其他计算
}
}
@凌驾
公共无效申报人(可丢弃的e){
//错误处理
}
@凌驾
未完成的公共空间(){
}
});
}
@凌驾
公共空间{
一次性的,一次性的;
super.ondestory();
}
公共可观察getMenuByShopAndCategoryId(@NonNull int category\u id,@NonNull int shop\u id){
返回apiService.getMenuByShopAndCategoryId(类别id、店铺id);
}
公共类MenuItemsAdapter扩展了RecyclerView.Adapter{
私人语境;
私有ArrayList menuItemArrayList;
私有ListRowMenuItemsBinding绑定;
私有MenuItemsAdapterHandler MenuItemsAdapterHandler;
公共MenuItemsAdapter(上下文上下文,ArrayList menuItemArrayList){
this.context=上下文;
this.menuitemaraylist=menuitemaraylist;
}
@非空
@凌驾
public MenuItemsAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
binding=DataBindingUtil.inflate(LayoutFlater.from(上下文),R.layout.list\u row\u menu\u items,viewGroup,false);
menuItemsAdapterHandler=新的menuItemsAdapterHandler(上下文);
binding.setHandler(menuItemsAdapterHandler);
配置标签();
返回新的视图持有者(绑定);
}
@凌驾
public void onBindViewHolder(@NonNull MenuItemsAdapter.ViewHolder ViewHolder,int i){
viewHolder.binding.lblItemName.setText(menuItemArrayList.get(i.getMenuName());
viewHolder.binding.lblPrice.setText(“MVR”+String.format(“%.2f”,Double.valueOf(menuItemArrayList.get(i).getSubTotal()));
if(menuItemArrayList.get(i).getAvailability().equals(Constants.AVAILABLE)){
binding.lblAvailability.set(上下文,HuqTypogrphyStyle.CAPS\u按钮\u绿色);
viewHolder.binding.lblAvailability.setText(“可用”);
}否则{
binding.lblAvailability.set(上下文,HuqTypogrphyStyle.CAPS\u按钮\u红色);
viewHolder.binding.lblAvailability.setText(“不可用”);
}
viewHolder.binding.setMenuItem(menuItemArrayList.get(i));
viewHolder.binding.executePendingBindings();
}
@凌驾
public int getItemCount(){
返回menuItemArrayList.size();
}
@凌驾
public int getItemViewType(int位置){
返回位置;
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
ListRowMenuItemsBinding绑定;
公共视图持有者(@NonNull ListRowMenuItemsBinding ListRowMenuItemsBinding){
super(listRowMenuItemsBinding.getRoot());
this.binding=listRowMenuItemsBinding;
}
}
私有void配置标签(){
binding.lblItemName.set(上下文,HuqTypogrphyStyle.H2_标题);
binding.lblPrice.set(context,HuqTypogrphyStyle.BODY_GRAY);
binding.lblavability.set(context,HuqTypogrphyStyle.BODY_GRAY);
}
}
尝试将api调用从on Resume移动到onCreate 尝试将api调用从on Resume移动到onCreate 试过了!没用。我删除了片段转换,并稍微减少了延迟。但我认为这不是解决办法。试过了!没用。我删除了片段转换,并稍微减少了延迟。但我认为这不是解决办法
public Observable<Response<MenuResponse>> getMenuByShopAndCategoryId(@NonNull int category_id, @NonNull int shop_id) {
return apiService.getMenuByShopAndCategoryId(category_id,shop_id);
}
public class MenuItemsAdapter extends RecyclerView.Adapter<MenuItemsAdapter.ViewHolder> {
private Context context;
private ArrayList<MenuResponse.MenuRequest> menuItemArrayList;
private ListRowMenuItemsBinding binding;
private MenuItemsAdapterHandler menuItemsAdapterHandler;
public MenuItemsAdapter(Context context, ArrayList<MenuResponse.MenuRequest> menuItemArrayList) {
this.context = context;
this.menuItemArrayList = menuItemArrayList;
}
@NonNull
@Override
public MenuItemsAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.list_row_menu_items, viewGroup, false);
menuItemsAdapterHandler = new MenuItemsAdapterHandler(context);
binding.setHandler(menuItemsAdapterHandler);
configureLabels();
return new ViewHolder(binding);
}
@Override
public void onBindViewHolder(@NonNull MenuItemsAdapter.ViewHolder viewHolder, int i) {
viewHolder.binding.lblItemName.setText(menuItemArrayList.get(i).getMenuName());
viewHolder.binding.lblPrice.setText("MVR " + String.format("%.2f", Double.valueOf(menuItemArrayList.get(i).getSubTotal())));
if (menuItemArrayList.get(i).getAvailability().equals(Constants.AVAILABLE)){
binding.lblAvailability.set(context, HuqTypogrphyStyle.CAPS_BUTTON_GREEN);
viewHolder.binding.lblAvailability.setText("AVAILABLE");
} else {
binding.lblAvailability.set(context, HuqTypogrphyStyle.CAPS_BUTTON_RED);
viewHolder.binding.lblAvailability.setText("NOT AVAILABLE");
}
viewHolder.binding.setMenuItem(menuItemArrayList.get(i));
viewHolder.binding.executePendingBindings();
}
@Override
public int getItemCount() {
return menuItemArrayList.size();
}
@Override
public int getItemViewType(int position) {
return position;
}
public class ViewHolder extends RecyclerView.ViewHolder {
ListRowMenuItemsBinding binding;
public ViewHolder(@NonNull ListRowMenuItemsBinding listRowMenuItemsBinding) {
super(listRowMenuItemsBinding.getRoot());
this.binding = listRowMenuItemsBinding;
}
}
private void configureLabels() {
binding.lblItemName.set(context, HuqTypogrphyStyle.H2_HEADING);
binding.lblPrice.set(context, HuqTypogrphyStyle.BODY_GRAY);
binding.lblAvailability.set(context, HuqTypogrphyStyle.BODY_GRAY);
}
}