Android性能优化

1. 在LinearLayout和RelativeLayout均能使用的情况下,并且嵌套层级相同(比如都是垂直往下的布局),优先选择LinearLayout,因为其计算速度更快。

2. 当用LinearLayout时需要的的嵌套层级比RelativeLayout更多时,优先选择RelativeLayout。

3. 能被多次复用的布局(必出现),要抽取出来,用<includelayout="@layout/xx"> 和<merge ...>   来引用。

4. 当某个布局只在特定条件出现的情况下(比如网络不好的展示图),用ViewStub引用,这样就能够按需加载。

5. 将耗时任务放入子线程。

6. 当将会有大量子线程出现的情况下(比如照片墙),用线程池。

7. 将那些有机会被本地读出来的数据,不仅在后台服务器保存一份,也在本地保存一份,sharedpreference.xml或者SQLite DB,那些简单的key唯一的用前者(比如用户名,密码,暱称等),而会大量出现重复的数据(比如每天测温都要上传)用后者。只有当写或更新时才将本地和网络都更新,只读时读本地即可,速度提高很多。

8. 优化listview,a) getView里的convertView的复用 b) viewHolder的使用 c)嵌套不要太多 d) 涉及网络图片时开启线程池 e) 滚动时才加载 f) 图片大小的控制 Bitmap.Options.inSampleSize

9.  图片,文件的三级缓存, 内存LruCache, 磁盘DiskCache,网络。

10. 大量数据库查询需要多次IO操作时(比如for循环嵌套,不断的读取db来组装json格式),可以先把所有数据一次性读入内存之后再操作内存来组装,速度会有惊人的提升,30倍以上是很常见的。

11. 慎用AsyncTask,只有当任务能够几秒之内完成时使用,因为一旦开始,Activity无法控制其结束,也就是Activity就算退出了,也会执行直至完毕。

12. 合理利用一些组合控件,比如TopBar, ListBar, CircleView。

13. 逻辑优化,合理的控制流程,算是好的算法能减少大量的无谓的计算。

14. 发布时关闭log输出,因为其调用的是JNI。

15. 采用硬件加速。

16. 在androidmanifest.xml中application添加  android:hardwareAccelerated="true"。不过这个需要在android 3.0才可以使用。

17. 优化你的布局。通过Android sdk中tools目录下的layoutopt 命令查看你的布局是否需要优化。

18. 将Acitivity 中的Window 的背景图设置为空。getWindow().setBackgroundDrawable(null);android的默认背景是不是为空。

19. 采用JNI,将耗时间的处理放到c/c++层来处理。

20. 数据库表的建立合理关系,索引的建立,加速查询速度。

21. 当某个操作触发的工作内容需要遍历一个很大的集合时,却只为了找出其中具备某个特征的那一个,则通常不要把循环放到操作里去做,否则每次都要循环一次,会变得很卡顿。好的做法是,操作之前,初始化一个map,把特征值和id映射起来,那么每次操作时,可以迅速根据id判断其特征值是否符合要求,这样总体只需要遍历一次即可,操作时的时间复杂度为O(1),也消除了卡顿感。

22.  下载网络数据到本地时,用一个接口把所有数据download下来,不要用多个接口不断调用消耗网络请求连接建立时间,插入本地数据库时把要循环操作的放入事务中。不要把单个操作让for循环来每次插入,而要把单个操作放入list中,让事务里执行for(list) opDB.

23. 当使用TabLayout + ViewPager + 多Fragment这种组织结构时, 一定要用使用懒加载,优化首次进入页面的速度和滑动的流畅度(UserVisibleHint=true时再加载网络数据和数据库数据);否则会出现黑屏情况!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章