代码优化学习笔记

来源:互联网 发布:汉王扫描软件下载 编辑:程序博客网 时间:2024/05/01 21:31

1.每当需要选择一个数据结构来解决问题时,最好将选择范围缩小到只有几个类,因为通常每个类为特定目的或为提供特定的服务而优化。例如,Vector内部有锁影响性能,如不需要在数据结构内部处理同步,应该选择ArrayList而不是Vector。


2.内存分配是优化的一部分,可以提供一个备用机制,然后捕获outOfMemoryError异常,这样可以让程序跑在更多的设备上。虽然这种可选的优化让代码难以维护,但提供了发挥空间。


3.Android展开资源(setContentView)是一个开销相对比较大的操作,可以通过降低布局(Layout,XML文件定义应用的外观)复杂性来使得资源展开加快。几个降低布局复杂性的步骤如下:

(1)使用RelativeLayout代替嵌套LinearLayout,尽可能保持“扁平化”的布局。此外,减少创建的对象数量,也会让事件的处理速度加快。

(2)使用ViewStub推迟对象创建。(ViewStub在运行时展开资源,当View-Stub需要展现时,它被相应的资源展开替换,自己成为等待垃圾回收的对象)。


4.StrictMode用来检测系统运行或访问网络等操作缓慢等不良问题的工具。通常情况下,在应用启动时,即当OnCreate()被调用时,启用StrictMode。只在开发阶段启用StrictMode,发布应用时,记得要禁用它。


5.加快要执行的SQL语句字符串的创建速度,使用+运算符来连接字符串不是最有效的方法,而使用StringBuilder对象,或调用String.format可以提高性能。

(1)String sql = "INSERT INTO cheese VALUES(\"" + name + "\",\"" + origin + "\")";393ms

(2)String sql = String.format("INSERT INTO cheese VALUES(\"%s\" ,(\"%s\")",name,origin);436ms

(3)StringBuilder sql = new StringBuilder();sql.append("INSERT INTO cheese VALUES(\""); sql.append(name).append("\",\"").append(origin).append("\")");371ms

(4)使用SQLiteStatement只进行一次编译速度快很多268ms

(5)使用ContentValues对象把值插入到数据库中352ms

(6)使用事务166ms

Android定义了一些可以提高性能的类,如可以使用DatabaseUtil.InsertHelper在数据库中插入多行,也只需编译一次INSERT语句。


6.高效实用内存之使用数据类型:

(1)处理大量数据时,使用可以满足要求的最小数据类型。例如,基于性能和空间的考量,选择short型数组而不是int数组。如果对精度要求不高(如果需要,使用FloatMath类),使用float而不是double。

(2)避免类型转换。尽量保持类型一致,尽可能在计算中使用单一类型。

(3)如果有必要取得更好的性能,推倒重来,但要认真处理。


7.Linux的优先级是从-20(最高)到19(最低),而线程的优先级是从1(最低)到10(最高)。


8.使用Message.obtain()或Handler.obtainMessage() API来获得Message对象,因为它们从全局的消息池中取出Message对象,这比每次单独创建新实例获取Message效率更高。利用这些API设置消息中携带的各种字段也比较容易。






原创粉丝点击