在非UI线程中处理Bitmap
来源:互联网 发布:centos 7 iso文件太大 编辑:程序博客网 时间:2024/05/22 12:55
译文出自谷歌安卓官网
BitmapFactory.decode*方法不能在UI线程中执行。因为加载这些图片所花费的时间是不可预知的,取决于各种各样的因素(从磁盘或网络上的加载速度,图片的大小,CPU的性能等等)。如果图片加载任务阻塞了UI线程,系统会为你的应用程序标记一个ANR,并且你可以选择关闭你的应用程序。
本课程引导你进入使用AsyncTask作为背景线程来处理图片加载任务,并且向你展示如何处理并发问题
使用AsyncTask
这个AsyncTask类提供了一个背景执行工作和将执行结果发布到UI线程中。要想使用AsyncTask,你得创建一个基类并重写其方法。
如下使用AsyncTask将图片加载到ImageView中,并且使用了decodeSampledBitmapFromResource()的例子
class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> { private final WeakReference<ImageView> imageViewReference; private int data = 0; public BitmapWorkerTask(ImageView imageView) { // Use a WeakReference to ensure the ImageView can be garbage collected imageViewReference = new WeakReference<ImageView>(imageView); } // Decode image in background. @Override protected Bitmap doInBackground(Integer... params) { data = params[0]; return decodeSampledBitmapFromResource(getResources(), data, 100, 100)); } // Once complete, see if ImageView is still around and set bitmap. @Override protected void onPostExecute(Bitmap bitmap) { if (imageViewReference != null && bitmap != null) { final ImageView imageView = imageViewReference.get(); if (imageView != null) { imageView.setImageBitmap(bitmap); } } }}
这个对ImageView的WeakReference确保AsyncTask不会阻碍ImageView被GC回收。当任务结束的时候,无法保证ImageView仍然在当前任务中,因此在onPostExecute( )中你必须检查ImageView的索引。例如,当用户从这个界面离开或者任务结束前配置发生了改变,这些会导致ImageView不存在,
开始异步加载Bitmap,并执行它
public void loadBitmap(int resId, ImageView imageView) { BitmapWorkerTask task = new BitmapWorkerTask(imageView); task.execute(resId);}
0 0
- 在非UI线程中处理Bitmap
- 在非UI线程处理Bitmap
- 在非UI线程处理Bitmap
- 在非UI线程处理Bitmap
- 在非UI线程处理Bitmap(实用)
- 在非UI线程处理Bitmap
- 非UI线程处理Bitmap
- 非UI线程处理Bitmap
- 非UI线程处理Bitmap
- 第二课:在非UI线程处理Bitmap
- Android学习路线(三十二)在非UI线程中处理Bitmap
- android 非UI线程处理Bitmap
- 非UI线程处理Bitmap(官方文档)
- Processing Bitmaps Off the UI Thread [在非UI线程处理Bitmap]
- 在UI线程外处理Bitmap
- 【Google官方教程】第二课:在非UI线程处理Bitmap
- 【Google官方教程】第二课:在非UI线程处理Bitmap
- 【Google官方教程】第二课:在非UI线程处理Bitmap
- selinux(案例) recovery删除data目录下的文件
- 文章标题 Linux下如何重启nginx
- 九大基础排序总结与对比
- php单例模式连接数据库--代码实现
- PAT 1053. 住房空置率 (20)
- 在非UI线程中处理Bitmap
- 依赖倒置 控制反转 依赖注入 (2)
- 强制关机等导致:remounting file system read-only
- 引用类型和基本类型区别
- 使用了 C++ 异常处理程序,但未启用展开语义。请指定 /EHsc
- Retrofit分析与实现
- php导出mysql数据字典
- 用Android代码实现自动打开USB调试
- CAS单点登录及数据库验证登录简易小例