【Android】RecyclerView卡顿问题jerky
2015-11-13 10:50
381 查看
解决RecyclerView卡顿的问题,找过很多问题的引发点,最后的解决灵感来自于这里:
onBindView里的IO操作导致RecyclerView scroll 卡顿
在项目中查找,发现onBindView中多图片使用Glide加载时确实是有保存bitmap到文件的IO操作,将IO操作注释掉,运行App,卡顿消失,这样,开始对IO动刀;
首先想到,每个IO操作新开线程来处理,为加快线程速度,保证预期效果不打太大折扣,想到利用ThreadPoolExecutor或者是ExecutorService进行
代码:
这样,就在保证recyclerView平滑滚动的同时,保存了Bitmap到本地。
onBindView里的IO操作导致RecyclerView scroll 卡顿
在项目中查找,发现onBindView中多图片使用Glide加载时确实是有保存bitmap到文件的IO操作,将IO操作注释掉,运行App,卡顿消失,这样,开始对IO动刀;
首先想到,每个IO操作新开线程来处理,为加快线程速度,保证预期效果不打太大折扣,想到利用ThreadPoolExecutor或者是ExecutorService进行
代码:
/* * 保存 bitmap到文件,并将文件路径返回,利用线程池新开IO线程,解决滚动时卡顿的问题 * */ public static String getFilePath(final Bitmap bitmap, String fileName) { final File picDir = Environment.getExternalStoragePublicDirectory(AppConfig.DIR_ROOT_PIC); final File f = new File(picDir, fileName + AppConfig.FILE_NAME_EXTENSION_PIC); try { final FileOutputStream fOut = new FileOutputStream(f); App.getThreadPool().execute(new Runnable() { @Override public void run() { try { f.createNewFile(); bitmap.compress(Bitmap.CompressFormat.PNG, 30, fOut); try { fOut.flush(); } catch (IOException e) { e.printStackTrace(); } try { fOut.close(); } catch (IOException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } }); } catch (FileNotFoundException e) { e.printStackTrace(); } return f.getAbsolutePath(); }
这样,就在保证recyclerView平滑滚动的同时,保存了Bitmap到本地。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories