友录(3)图像异步加载
2016-06-07 20:44
603 查看
android的开发一般的图片处理都会有异步加载和本地缓存,图片的异步加载目的是减少ui线程的耗时操作;
1)在Android应用中UI线程5秒没响应的话就会抛出无响应异常,启动一个新的线程来获取资源,完成后通过Handler机制发送消息,并在UI线程中处理消息,从而达到在异步线程中获取图片,然后通过Handler Message来更新UI线程的过程。
2)使用android中提供的AsyncTask来完成。**
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(); }
相关文章推荐
- HDU - 1565 方格取数(1) 状压DP
- STL容器
- 语句创建数据库表及增删改查
- Android Class加载机制(未完)
- Spark定制班第21课:Spark Streaming中动态Batch Size深入及RateController解析
- 使用Windbg解析dump文件 .
- 开一篇文章 记录我的java学习路上看过的书和资料 以及杂七杂八的面试经历
- nc元数据导出脚本
- 递归-文件结构“图”(算法基础 第3周)
- 【THUSC2016】蒟蒻的酱油记
- 最近十次打字记录
- 跟着小白学~如何使用二维数组打印杨辉三角
- canvas text
- linux下vi操作Found a swap file by the name
- Lightoj 1003 - Drunk(拓扑排序)
- 静态储存
- C++智能指针(auro_ptr...)
- 优先队列用法
- 实战 virtualenv 搭建多版本 Python 环境
- laravel随记(3)