Android性能优化-SQLite数据库

本系列博文我想围绕在Android中的一些优化细节和大家进行分享。Android中的优化可谓又是一重任,Android不足以像PC端具有很高的内存执行空间给我们用来重量级使用开销。有限的内存资源限制了我们的扩展方向。所以,在Android中的内存优化以及性能优化成为了一个攻城狮不可忽略的重点所在。本系列博文关于性能优化我会分为一下4个模块来和大家分享:


(1)Android性能优化 一 SQLite数据库

(2)Android性能优化 一 布局优化

(3)Android性能优化 一 数据优化

(4)Android性能优化 一 网络优化


今天我们先一起来了解下在Android中的SQLite数据库操作方面有哪些需要优化和注意的地方。

Android中对于SQLite数据库的操作,系统为我们提供了很方便的实现。我们只需要创建自己的一个类继承SQLiteOpenHelper类并实现其中的onCreate方法和onUpgrade方法可。在数据库优化方面,SQLite和其他数据库例如 Oracle、SQL Server、 My Sql等等,一样拥有相同的原理,只是SQLite是一种嵌入式的数据库,在移动端手机中使用比较合适。对于SQLite的优化,我们可以分为以下两类:


 1> 索引

 2> 事务


关于数据库创建索引想必大家都比较熟悉。索引给我们带来的好处是显而易见的。一个千万级的数据,索引的存在使查询数据的速度升华为一个更优的高度。同样,在查询速度提升的同时,创建索引所带来的开销也是不可忽视的。有利必有弊,所以适当的情况下创建索引,会给我们的数据查询带来质的变化。

了解了创建索引的优点和缺点,我们看下在Android中的SQLite数据库创建索引的方式:


Android性能优化-SQLite数据库


从上面代码我们看到,在onCreate方法中只需要使用SQLiteDatabase实例db调用execSQL方法执行创建创建索引的SQL语句即可。索引的使用适合在当某个字段查询频率高,而更新操作频率低的情况下并且经常有范围的查询(>,< >=,<=,=)已经对order bygroup by的操作。对于SQLite创建索引我们先说到这里,对于索引还不太了解的童靴,可以看下这篇文章:SQLite 索引


了解完了索引,下面我们继续探讨SQLite的事务。


对于事务,就是数据库的一次原子性的执行操作。原子性的执行操作为数据的整体性执行带来的可靠安全性。在SQLite中,如果我们默认事务(会为每个插入和更新都创建一次事务,并且在每次插入和更新后会立刻提交本次操作),即没有手动创建事务,假设此时有1000条数据,那么数据的执行流程是 创建事务 -> 执行插入或更新操作 -> 提交事务,这样的流程会执行1000次。如果我们手动创建了事务,则执行流程为: 创建事务 -> 执行1000条SQL数据操作 -> 提交事务。很明显,我们在SQLite中使用事务可以为插入和更新操作带来很大的优化。下面来看在SQLite中如何使用事务:


Android性能优化-SQLite数据库


从上图我们看到,执行一次事务分为了四步,分别是:开始事务 ->  执行SQL ->设置事务执行成功 ->  结束事务

ok,两个主要的模块我们已经介绍完毕,下面来看下对于SQLite的一些其他的优化细节:

 1> 少用cursor.getColumnIndex():使用cursor.getColumnIndex(),系统会根据列名来获取列所在的下标,比较耗时,所以我们可以使用static定义下标,直接通过下标来获取某列。

 2> 使用StringBuilder或StringBuffer来拼接字符串:SQL语句字符串的拼接或创建多个临时变量,此时我们可以使用StringBuilder或StringBuffer来拼接字符串,减少不必要的资源占用,这个不多说,大家都懂的。

 3> 查询时,只返回自己需要的值或结果:有些童靴可能为了简单,在查询数据时直接将全部数据获取出来,然后再get到自己想要的某列值。这样的操作同样会带来不必要的系统资源开销和浪费。所以,在查询时,我们只取自己需要的字段和结果。

 4>cursor使用后要及时关闭:即在查询完结果后,调用cursor.close()将资源关闭。

关于Android中SQLite数据库的优化,就和大家分享到这里,有不妥的地方还望大神多多提醒。下一篇,我将和大家一起分享在Android优化系列的第二篇:Android性能优化-布局优化

转自:https://blog.csdn.net/u013718120/article/details/51351041