Android — Являются ли эти значения нормальными для приложения?

#android #performance #android-profiler

#Android #Производительность #android-профилировщик

Вопрос:

Я должен сказать, что я очень новичок в Android. В последнее время в моем представлении recycler, когда я загружаю более 100 элементов (в основном изображений), мое приложение сначала отстает, а затем закрывается без сообщения об ошибке. Это значения профилировщика. Что я хочу знать, так это являются ли эти значения нормальными? если нет, то какое значение является нормальным. Я думаю, мне нужно упомянуть, что это приложение для совместного использования, такое как facebook.

Профилировщик Android 1

Android Profiler 2

Android Profiler 3

Мой код адаптера:

 if(list.get(position).getPost().getTogroup()!=null){
            holder.groupname.setText(list.get(position).getPost().getTogroup());
            holder.profilephoto.setVisibility(View.VISIBLE);
            holder.namebelow.setVisibility(View.VISIBLE);
            holder.groupname.setVisibility(View.VISIBLE);
            holder.usernamebelow.setVisibility(View.VISIBLE);
            Glide.with(holder.itemView.getContext()).load(list.get(position).getPost().getGroupppurl()).into(holder.profilephoto);
            holder.namebelow.setText(list.get(position).getUser().getNamesurname());
            holder.usernamebelow.setText("(@" list.get(position).getUser().getUsername() ")");
            if(list.get(position).getPost().getType().equals("text")){
                if(!list.get(position).getPost().getDescription().equals("")){
                    holder.descrition.setText(list.get(position).getPost().getDescription());
                    holder.descrition.setVisibility(View.VISIBLE);
                }

            }
            if(list.get(position).getPost().getType().equals("link")){
                holder.linkpreview.setVisibility(View.VISIBLE);
                String url=list.get(position).getPost().getUrl();
                String linkimageurl=list.get(position).getPost().getLinkimageurl();
                if(holder.itemView.getContext()!=null){
                    Glide.with(holder.itemView.getContext()).load(linkimageurl).into(holder.linkimage);

                }
                String linktitle=list.get(position).getPost().getLinktitle();
                holder.linktitle.setText(linktitle);
                String linkdesc = list.get(position).getPost().getLinkdesc();
                holder.linkdesc.setText(linkdesc);
                holder.linkurl.setText(url);

                String description = list.get(position).getPost().getDescription();
                if(!description.equals("")){
                    holder.descrition.setText(description);
                    holder.descrition.setVisibility(View.VISIBLE);
                }
            }
            if(list.get(position).getPost().getType().equals("image")){



                float iratio = list.get(position).getPost().getImageratio();
                holder.imagelayout.setVisibility(View.VISIBLE);
                holder.postimage.setRatio(iratio);
                String url=list.get(position).getPost().getUrl();

                if(holder.itemView.getContext()!=null){
                    Glide.with(holder.itemView.getContext()).load(url).addListener(new RequestListener<Drawable>() {
                        @Override
                        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                            return false;
                        }

                        @Override
                        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                            holder.imageloadingbar.setVisibility(View.INVISIBLE);
                            return false;
                        }
                    }).into(holder.postimage);
                }

                String description = list.get(position).getPost().getDescription();;
                if(!description.equals("")){
                    holder.descrition.setText(description);
                    holder.descrition.setVisibility(View.VISIBLE);
                }
            }
            if(list.get(position).getPost().getType().equals("video")){
                holder.videoplayerjz.widthRatio=1;
                holder.videoplayerjz.heightRatio=1;
                holder.videoplayerjz.fullscreenButton.setVisibility(View.GONE);
                holder.videoplayerjz.setVisibility(View.VISIBLE);
                String url=list.get(position).getPost().getThumburl();

                holder.videoplayerjz.setUp(
                        list.get(position).getPost().getUrl(),
                        "", Jzvd.SCREEN_WINDOW_LIST);
                if(holder.itemView.getContext()!=null){
                    Glide.with(holder.itemView.getContext()).load(url).into(holder.videoplayerjz.thumbImageView);

                }

                String description = list.get(position).getPost().getDescription();
                if(!description.equals("")){
                    holder.descrition.setText(description);
                    holder.descrition.setVisibility(View.VISIBLE);
                }
            }

        }
        if(list.get(position).getPost().getTogroup()==null){
            holder.profilephoto.setVisibility(View.VISIBLE);
            holder.namecenter.setVisibility(View.VISIBLE);
            holder.usernamecenter.setVisibility(View.VISIBLE);
            Glide.with(holder.itemView.getContext()).load(list.get(position).getUser().getProfilephotourl()).into(holder.profilephoto);
            holder.namecenter.setText(list.get(position).getUser().getNamesurname());
            holder.usernamecenter.setText("(@" list.get(position).getUser().getUsername() ")");
            if(list.get(position).getPost().getType().equals("text")){
                if(!list.get(position).getPost().getDescription().equals("")){
                    holder.descrition.setText(list.get(position).getPost().getDescription());
                    holder.descrition.setVisibility(View.VISIBLE);
                }

            }
            if(list.get(position).getPost().getType().equals("link")){
                holder.linkpreview.setVisibility(View.VISIBLE);
                String url=list.get(position).getPost().getUrl();
                String linkimageurl=list.get(position).getPost().getLinkimageurl();
                if(holder.itemView.getContext()!=null){
                    Glide.with(holder.itemView.getContext()).load(linkimageurl).into(holder.linkimage);

                }
                String linktitle=list.get(position).getPost().getLinktitle();
                holder.linktitle.setText(linktitle);
                String linkdesc = list.get(position).getPost().getLinkdesc();
                holder.linkdesc.setText(linkdesc);
                holder.linkurl.setText(url);

                String description = list.get(position).getPost().getDescription();
                if(!description.equals("")){
                    holder.descrition.setText(description);
                    holder.descrition.setVisibility(View.VISIBLE);
                }
            }
            if(list.get(position).getPost().getType().equals("image")){



                float iratio = list.get(position).getPost().getImageratio();
                holder.imagelayout.setVisibility(View.VISIBLE);
                holder.postimage.setRatio(iratio);
                String url=list.get(position).getPost().getUrl();

                if(holder.itemView.getContext()!=null){
                    Glide.with(holder.itemView.getContext()).load(url).addListener(new RequestListener<Drawable>() {
                        @Override
                        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                            return false;
                        }

                        @Override
                        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                            holder.imageloadingbar.setVisibility(View.INVISIBLE);
                            return false;
                        }
                    }).into(holder.postimage);
                }

                String description = list.get(position).getPost().getDescription();;
                if(!description.equals("")){
                    holder.descrition.setText(description);
                    holder.descrition.setVisibility(View.VISIBLE);
                }
            }
            if(list.get(position).getPost().getType().equals("video")){
                holder.videoplayerjz.widthRatio=1;
                holder.videoplayerjz.heightRatio=1;
                holder.videoplayerjz.fullscreenButton.setVisibility(View.GONE);
                holder.videoplayerjz.setVisibility(View.VISIBLE);
                String url=list.get(position).getPost().getThumburl();

                holder.videoplayerjz.setUp(
                        list.get(position).getPost().getUrl(),
                        "", Jzvd.SCREEN_WINDOW_LIST);
                if(holder.itemView.getContext()!=null){
                    Glide.with(holder.itemView.getContext()).load(url).into(holder.videoplayerjz.thumbImageView);

                }

                String description = list.get(position).getPost().getDescription();
                if(!description.equals("")){
                    holder.descrition.setText(description);
                    holder.descrition.setVisibility(View.VISIBLE);
                }
            }
        }
  

Комментарии:

1. Вы загружаете свое изображение из Интернета или локально (res)? И можете ли вы показать свой адаптер, когда вы добавляете изображение в imageview или другие представления, тогда мы сможем увидеть, проблема ли это с памятью или другие, поскольку вы упомянули, что это отстает

2. Я добавил свой код адаптера @CbL

3. @CbL Также я должен упомянуть, что приложение также иногда выходит из строя из-за оом

4. Я прочитал предоставленный вами код. Я предлагаю вам попробовать очистить imagelayout и videoplayerjz. При попытке запросить изображение в этом представлении при прокрутке часть невидимого imageview будет кэшироваться в памяти, это может привести к чрезмерному использованию памяти. Вы можете попробовать вызвать Glide clear() в onViewRecycled, посмотреть, может ли это улучшить производительность.

5. Glide recycle может ссылаться bumptech.github.io/glide/doc /…