安卓:滑翔在onStart /错误的onResume

问题描述:

我有滑翔一个奇怪的错误,我不知道该怎么办才好。基本上我有这个功能,它从reddit.com/r/earthporn/加载图像安卓:滑翔在onStart /错误的onResume

newsdata.data.children [位置] .data.url是URL的列表

public void displayImage(final int position) { 
     Drawable d = view.getContext().getResources().getDrawable(R.drawable.ic_collections_white_24dp); 
     System.out.println(newsData.data.children[position].data.url); 
     Glide.with(view.getContext()) 
       .load(newsData.data.children[position].data.url) 
       .asBitmap()  
       .listener(new RequestListener<String, Bitmap>() { 
        @Override 
        public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) { 
         displayImage(position + 1); 
         //todo: make sure we don't run into a index out of bounds. 
         return false; 
        } 

        @Override 
        public boolean onResourceReady(Bitmap resource, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) { 
         return false; 
        } 
       }) 
       .centerCrop() 
       .error(d) 
       .into(new BitmapImageViewTarget(view.getImageView()) { 
        @Override 
        protected void setResource(Bitmap resource) { 
         super.setResource(resource); 
         view.setImageBitmap(resource); 
         wallPaperBitmap = resource; 
         System.out.println(resource); 
        } 
       }); 
    } 

的Android不能加载出现在subreddit上的每一个图像。发生这种情况时,我下载下一张图片。在今天的运行中,它将加载此图像http://imgur.com/HOSg2FC,称为例外,然后加载此代码将按预期方式运行OnCreate,该代码将按预期方式运行。它运行,遇到异常,再次调用displayImages()并设置正确的图像。 (请让我知道,如果有更好的方法来做到这一点)

的onResume /在onStart是问题所在。代码将运行,遇到异常,将错误绘制为可绘制,再次调用displayImages,但不更改imageview。 setResource(位图资源)也会给我正确的位图,但不会让我更新imageview。

基本上,它冻结的ImageView到错误绘制,或在空白屏幕中,如果没有绘制,不会让我改变它。

调用的onResume用下面的代码:

if(wallPaperBitmap != null) { 
      view.setImageViewPicture(wallPaperBitmap); 
      //view.showButtons(); 
      System.out.println("bitmap != null"); 
     } 
     else { 
      retrieveImage(SubReddit.Earth); 
      System.out.println("bitmap = null"); 
     } 

将设置正确的画面。

我想,也许这样我试着用diskcachestrategy.none但这并没有帮助,这可能是与缓存的问题。作为最后的手段,一旦setResource被更新后的位图调用,或者只是使用Picasso,我可能会刷新屏幕,但我宁愿避免这种情况。

任何帮助表示赞赏!

编辑:我也遇到了错误:d/Skia的:--- SkImageDecoder ::厂空在onStart

返回

滑翔可以在onStart重新启动失败的请求,这将触发故障,则设置错误可绘制。为了解决这个问题,你应该做两件事情:

  1. 调用setImageResource/setImageDrawable自己(外onResourceReady)之前,请务必呼吁View S和Target小号clear()。调用clear()将防止滑行从管理该View/Target,这反过来将无法重新启动处理通信负载停止滑行。

  2. 如果你继续通过滑翔(加载的资源的引用通常是BitmapDrawable,你需要确保以空出你的参考,当TargetonLoadClearedonLoadFailed方法被调用,这ISN“ t直接关系到这个问题,但是它在上面的代码中是错误的,并且如果Glide在引用它时重新使用了Bitmap,则会导致奇怪的错误