Android学习-第58天

今天的任务为创建并启动后台线程,代码如下:

ThumbnailDownloader.java:

 com.bignerdranch.android.photogallery ;
导入 android.graphics.Bitmap ;
导入 android.graphics.BitmapFactory ;
导入 android.os.Handler ;
导入 android.os.HandlerThread ;
导入 android.os.Message ;
导入 android.util.Log ;
import java.io.IOException ;
import java.util.concurrent.ConcurrentHashMap ;
import java.util.concurrent.ConcurrentMap ;
公共类 ThumbnailDownloader <T> 扩展了 HandlerThread {
    


private static final String TAG = “ThumbnailDownloader” ;
    private static final int MESSAGE_DOWNLOAD = 0 ;
    private boolean mHasQuit = false;
    私人处理程序mRequestHandler ;
    private ConcurrentMap <T  String> mRequestMap = new ConcurrentHashMap <>();
    私人处理程序mResponseHandler ;
    private ThumbnailDownloadListener <T> mThumbnailDownloadListener ;
    公共接口 ThumbnailDownloadListener <T> {
         void

onThumbnailDownloaded(T target  Bitmap bitmap);
    }

    public void setThumbnailDownloadListener(ThumbnailDownloadListener <T> listener){
        mThumbnailDownloadListener = listener ;
    }

    public ThumbnailDownloader(Handler responseHandler){
         super(TAG);
        mResponseHandler = responseHandler ;
    }

    @覆盖
    保护无效 onLooperPrepared(){
        mRequestHandler = new Handler(){
            @覆盖
            public void handleMessage(Message msg){
                 if(msg.what == MESSAGE_DOWNLOAD){
                    T target =(T)msg.obj ;
                    Log.i(TAG “请求URL:” + mRequestMap.get(target));
                    handleRequest(target);
                }
            }
        } ;
    }

    @覆盖
    public boolean quit(){
        mHasQuit = true;
        return super .quit();
    }

    public void queueThumbnail(T target  String url){
        Log.i(TAG “有网址:” + url);
        if(url == null){

            mRequestMap.remove(target);
        } else {
            mRequestMap.put(target  url);
            mRequestHandler.obtainMessage(MESSAGE_DOWNLOAD  target)
                    .sendToTarget();
        }
    }

    public void clearQueue(){
        mRequestHandler.removeMessages(MESSAGE_DOWNLOAD);
        mRequestMap.clear();
    }

    private void handleRequest(final T target){
         try {
             final String url = mRequestMap.get(target);
            如果(url == null){
                 return;
}
            

            byte [] bitmapBytes = new FlickrFetchr()。getUrlBytes(url);
            最终的位图位图= BitmapFactory
                    .decodeByteArray(bitmapBytes 0  bitmapBytes.length);
            Log.i(TAG “创建位图”;
mResponseHandler.post(new Runnable(){
                 public void run(){
                     if(mRequestMap.get(target)!= url ||
            
                            mHasQuit){
                        返回;
                    }

                    mRequestMap.remove(target);
                    mThumbnailDownloadListener.onThumbnailDownloaded(target  bitmap);
                }
            });
        } catch(IOException ioe){
            Log.e(标签“下载图片时出错”  ioe);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38815597/article/details/80217085