android - 为 ImageAdapter 异步获取远程图像

标签 android multithreading asynchronous galleryview

我有一个 getView() 的 Android Gallery ImageAdapter 实现,如下所示:

public View getView(int arg0, View arg1, ViewGroup arg2) {
    String strURL = "http://app1.exactdev.co.za/android/celebs/celeb" + (arg0+1) + ".jpg";      
    Bitmap bm = RemoteBitMapHelper.getRemoteBitMap(strURL); //synchronous request               

    ImageView i = new ImageView(ctx);       
    i.setImageBitmap(bm); 
    return i;
}

如何让 getView 异步完成它的工作?

最佳答案

简单的答案是您可以将它放在 AsyncTask 中。类似下面的内容(未经测试)

public View getView(int arg0, View arg1, ViewGroup arg2) {

    final ImageView i = new ImageView(ctx);
    String url = "http://app1.exactdev.co.za/android/celebs/celeb" + (arg0 + 1) + ".jpg";

    new AsyncTask<String, Void, Bitmap>() {

        @Override
        protected Bitmap doInBackground(String... urls) {
            return RemoteBitMapHelper.getRemoteBitMap(urls[0]);
        }

        @Override
        protected void onPostExecute(Bitmap result) {
            if (result != null) {
                i.setImageBitmap(result);
            }
        }

    }.execute(url);

    return i;
}

关于android - 为 ImageAdapter 异步获取远程图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6276826/

相关文章:

android - ZTE Android 版本 4.0.4 上的着色器损坏

java - Android、Mapbox、位置、Java

c# - 如果线程无论如何都被阻塞,异步 IO 有什么意义(参见示例)

android - Junit 输出使用 the-missing-android-xml-junit-test-runner

java - 在布局中使用表面 View 隐藏/显示软键盘时的黑色区域

multithreading - 为什么需要空互斥体?

Java线程中断: interrupt() vs stop()

android - 是否可以启动一个新的 Intent 并让它在单独的线程中运行?

javascript - 无需 Websocket 即可向浏览器异步推送消息

c# - TCP 客户端高频发送的异步或单独线程