Android性能优化——I/O篇
2015-12-31 16:51
447 查看
数据库操作:
1.使用事务进行批量数据操作:
数据库操作的本质是对磁盘文件的操作,频繁操作文件是一个耗时操作,影响数据库的存取速度。使用事务会降低数据库文件的开关频率,从而节约操作时间:
普通方式:
事务方式:
测试:
结果:
对比发现使用事务进行批量操作消耗的时间远远小于正常操作。
2.尽量使用sqliteOpenHelper.getReadableDatabase()连接数据库。getWritableDatabase()以读写的方式连接数据库,若数据库磁盘已满,将无法写入,会报错;而getReadableDatabase()先已读写的方式连接数据库,若数据库磁盘空间已满,便改为以只读的方式打开。
1.使用事务进行批量数据操作:
数据库操作的本质是对磁盘文件的操作,频繁操作文件是一个耗时操作,影响数据库的存取速度。使用事务会降低数据库文件的开关频率,从而节约操作时间:
普通方式:
public void insertMemberListNormal(List<MemberModel> memberModelList){ int size = memberModelList.size(); for (int i = 0;i < size;i++){ ContentValues contentValues = new ContentValues(); contentValues.put(DBConfig.MEMBER_ID,memberModelList.get(i).getMemberId()); contentValues.put(DBConfig.MEMBER_NAME, memberModelList.get(i).getName()); db.insert(DBConfig.TAB_MEMBER_NAME, null,contentValues); } }
事务方式:
public void insertMemberListWithTransaction(List<MemberModel> memberModelList){ db.beginTransaction(); try { int size = memberModelList.size(); for (int i = 0;i < size;i++){ ContentValues contentValues = new ContentValues(); contentValues.put(DBConfig.MEMBER_ID,memberModelList.get(i).getMemberId()); contentValues.put(DBConfig.MEMBER_NAME, memberModelList.get(i).getName()); db.insert(DBConfig.TAB_MEMBER_NAME, null, contentValues); } db.setTransactionSuccessful(); }catch (Exception e){ e.printStackTrace(); }finally { db.endTransaction(); } }
测试:
MemberDBService memberDBService = new MemberDBService(this); ArrayList<MemberModel> memberModelList= new ArrayList<>(); for(int i = 0;i < 100;i++){ MemberModel memberModel1 = new MemberModel(); memberModel1.setName("lxfeng"+i); memberModel1.setMemberId(i + ""); memberModel1.setAge(24); memberModelList.add(memberModel1); } long startTimeTransaction = System.currentTimeMillis(); memberDBService.insertMemberListWithTransaction(memberModelList); long endTimeTransaction = System.currentTimeMillis(); Log.e(TAG, "transaction insert time:" + (endTimeTransaction - startTimeTransaction)); long startTimeNomal = System.currentTimeMillis(); memberDBService.insertMemberListNormal(memberModelList); long endTimeNormal = System.currentTimeMillis(); Log.e(TAG,"normal insert time:" + (endTimeNormal - startTimeNomal));
结果:
MainActivity﹕ transaction insert time:26 MainActivity﹕ normal insert time:717
对比发现使用事务进行批量操作消耗的时间远远小于正常操作。
2.尽量使用sqliteOpenHelper.getReadableDatabase()连接数据库。getWritableDatabase()以读写的方式连接数据库,若数据库磁盘已满,将无法写入,会报错;而getReadableDatabase()先已读写的方式连接数据库,若数据库磁盘空间已满,便改为以只读的方式打开。
相关文章推荐
- android实现断点续传
- Android高效加载大图、多图解决方案,有效避免程序OOM
- Android全屏或者取消标题栏 以及可能出现问题
- android 两数相除取小数点后n位
- Android 编程下 Touch 事件的分发和消费机制
- 关于友盟更新的问题。
- android - windowSoftInputMode属性
- android listview的点击项滑到最顶端
- Android Notification消息提示
- android中的提示信息显示方法(toast应用)
- 深入解读Android开发中Activity的生命周期
- android sdk manager proxy
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- android 如何兼容32位的库文件
- Android Camera 无法拍照
- Android进阶——字符串排序
- android SwipeMenuListView ScrollView 滑动冲突
- Android带有删除按钮的EditText:EditTextWithDeleteButton
- Android连续点击两次按钮启动两次Activity
- Android性能优化典范(三)