#android #performance #android-profiler
#Android #Производительность #android-профилировщик
Вопрос:
Я должен сказать, что я очень новичок в Android. В последнее время в моем представлении recycler, когда я загружаю более 100 элементов (в основном изображений), мое приложение сначала отстает, а затем закрывается без сообщения об ошибке. Это значения профилировщика. Что я хочу знать, так это являются ли эти значения нормальными? если нет, то какое значение является нормальным. Я думаю, мне нужно упомянуть, что это приложение для совместного использования, такое как facebook.
Мой код адаптера:
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 /…