【问题标题】:instanceof not working on references while loading images with AsyncTask in Android在 Android 中使用 AsyncTask 加载图像时,instanceof 无法处理引用
【发布时间】:2014-03-24 19:12:20
【问题描述】:

我深入查看了http://developer.android.com/training/displaying-bitmaps/process-bitmap.html 此处的文档,并使用本指南http://android-developers.blogspot.in/2010/07/multithreading-for-performance.html 创建了一个处理异步任务并发的 ImageLoader。

我的代码几乎相同,特别是我下面的代码完全相同:

private static BitmapDownloaderTask getBitmapDownloaderTask(ImageView imageView) {
    if (imageView != null) {
        Drawable drawable = imageView.getDrawable();
        if (drawable instanceof DownloadedDrawable) {
            DownloadedDrawable downloadedDrawable = (DownloadedDrawable)drawable;
            return downloadedDrawable.getBitmapDownloaderTask();
        }
    }
    return null;
}

问题是条件

DownloadedDrawable 的可绘制实例

从未经过验证。一切看起来都不错,但drawable 似乎不是我的DownloadedDrawable 类的一个实例,我不知道为什么。你能帮帮我吗?

编辑:我发现这与引用有关。事实上,imageView.getDrawable() 返回一个具有 BitmapDrawable 引用的对象

android.graphics.drawable.BitmapDrawable@yyyyyyyy

如果我尝试将其转换为 DownloadedDrawable 对象(我的自定义子类的实例)或在其上使用 instanceof 运算符,则会出现错误,因为该对象是通过 DowanloadedDrawable 引用访问的

my_package.image_loader.DownloadedDrawable@xxxxxxxx

如何解决这个问题?

【问题讨论】:

  • drawable 是非空的吗?
  • 是的。我检查了所有参考资料,一切似乎都分配得很好。

标签: android image reference android-asynctask


【解决方案1】:

我强烈建议您跳过重新发明轮子来下载图像。有一些很棒的开源库可以处理简单的下载,让您可以非常轻松地管理磁盘和内存缓存。

我自己处理过Picasso,但也有UIL 和其他一些你应该尝试的。

这两个库都会为您处理 AdapterView 回收并执行大量其他任务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多