您的位置:首页 > 其它

友录(3)图像异步加载

2016-06-07 20:44 603 查看
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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: