图像异步加载

android的开发一般的图片处理都会有异步加载和本地缓存,图片的异步加载目的是减少ui线程的耗时操作;
1)在Android应用中UI线程5秒没响应的话就会抛出无响应异常,启动一个新的线程来获取资源,完成后通过Handler机制发送消息,并在UI线程中处理消息,从而达到在异步线程中获取图片,然后通过Handler Message来更新UI线程的过程。
2)使用android中提供的AsyncTask来完成。**

public static void asyncGetAvatar(final Context context,final int photoId,final OnLoadAvatarFinishListener listener){
        new AsyncTask<Void,Void, Bitmap>() {

            @Override
            protected Bitmap doInBackground(Void... params) {
                //优先从缓存中取photoId所对应的头像图片
        Bitmap bitmap=cache.get(photoId);
        if(bitmap==null){
        if(photoId==0){
            //没有头像则为联系人设置头像
            //bitmap=BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_launcher);
            bitmap=getMyAvatar(context);
            cache.put(photoId,bitmap);
        }else{
            //有头像在data数据表中的data15列
             ContentResolver cr=context.getContentResolver();
             Cursor cursor=cr.query(Data.CONTENT_URI, 
                     new String[]{Data.DATA15},
                     Data._ID+"=?",
                     new String[]{String.valueOf(photoId)},
                     null);

             cursor.moveToNext();//指向第一条数据
             byte[] bytes=cursor.getBlob(0);

             Bitmap avatar=BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
             cursor.close();

             bitmap = getCircleAvatar(context,avatar);
             //把获得的头像放到缓存中存储起来
             cache.put(photoId,bitmap);
        }
        }
        return bitmap;
            }
            @Override
            protected void onPostExecute(Bitmap result) {
                listener.onLoadAvatarFinis(result);
            }
        }.execute();
    }

版权声明:本文为kang995066277原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。