android 开发 性能优化
2016-10-12 15:27
190 查看
1.ui层
①.在listview,gridview中复用item
②.pager最好不要过多预加载,默认预加载为二
③.多用ViewStub,减少初加载时渲染界面消耗的内存
④.多用merge,减少视图的嵌套层次结构
2.图片
①.适当压缩图片,但是也要适应大分辨率手机,所以需要在drawable或者mipmap中创建多个文件夹,放不同分辨率的图片
②.避免使用位图(.jpg,.png),这样可以节省不少空间
③.用xml绘图,可以用来代替位图,可以节省空间,而且具有很好的适配性,可以适应任何屏幕
④.通过draw()创建自定义views。
⑤.再不能使用xml的地方使用矢量图,可以自己创建矢量图,也可以利用SVG工具创建矢量图,还可以在阿里巴巴矢量图标库中直接找矢量图
⑥.如果实在要用png图片,可以用PNGCrash优化一下
3.运行速度
①.当在LinearLayout使用时会嵌套多层布局时,而Relativeyout又可以使用时,最好用Relativeyout
②.用异步任务(AsynTask),完成耗时操作,提高ui的响应性
③.用merge
4.缓存与网络
①.用软引用,弱引用或者用lrucache,disklrucache。当我们用强引用时候发现占用内存,然后我们选择了用弱引用,软引用。当我们发现内存回收不可控时,我们会选择用lrucache和disklrucache通过算法来平衡内存与硬盘缓存
②.网络+数据库,记录上一次请求时间,然后在五分钟内不在请求网络,避免重复请求,只加载数据库数据就行。或者还有一些http框架是支持这些的,或者当服务端返回304时将之前缓存的数据直接返回
③.利用框架合并多个http请求
④.控制请求并发量。对客户端本身,除了上述的实现,我们还需要合理的缓存,控制最大请求并发量,及时取消已失效的请求,过滤重复请求,timeout时间设置,请求优先级设置等
5.代码规范
①.在for loop中不要声明临时变量,不到万不得已不要try catch
②.明白垃圾回收机制,避免频繁GC,OOM
③.合理使用数据类型,比如StringBuilder代替String,(笔试题最常见的是str+=”str”中有几个对象) ,少用枚举enum,少用父类声明。(List,Map)
④.不要频繁的new 线程,可以使用线程池代替
⑤.你要知道单例的好处,并正确使用他
⑥.多用常量,少用显式的”action_key”,并维护一个常量类,别重复声明这些常量。
⑦.如果可以,至少要弄懂策略模式,组合模式,装饰模式,工厂模式,观察者模式。这些可以合理的帮助你解耦合
①.在listview,gridview中复用item
②.pager最好不要过多预加载,默认预加载为二
③.多用ViewStub,减少初加载时渲染界面消耗的内存
④.多用merge,减少视图的嵌套层次结构
2.图片
①.适当压缩图片,但是也要适应大分辨率手机,所以需要在drawable或者mipmap中创建多个文件夹,放不同分辨率的图片
②.避免使用位图(.jpg,.png),这样可以节省不少空间
③.用xml绘图,可以用来代替位图,可以节省空间,而且具有很好的适配性,可以适应任何屏幕
④.通过draw()创建自定义views。
⑤.再不能使用xml的地方使用矢量图,可以自己创建矢量图,也可以利用SVG工具创建矢量图,还可以在阿里巴巴矢量图标库中直接找矢量图
⑥.如果实在要用png图片,可以用PNGCrash优化一下
3.运行速度
①.当在LinearLayout使用时会嵌套多层布局时,而Relativeyout又可以使用时,最好用Relativeyout
②.用异步任务(AsynTask),完成耗时操作,提高ui的响应性
③.用merge
4.缓存与网络
①.用软引用,弱引用或者用lrucache,disklrucache。当我们用强引用时候发现占用内存,然后我们选择了用弱引用,软引用。当我们发现内存回收不可控时,我们会选择用lrucache和disklrucache通过算法来平衡内存与硬盘缓存
②.网络+数据库,记录上一次请求时间,然后在五分钟内不在请求网络,避免重复请求,只加载数据库数据就行。或者还有一些http框架是支持这些的,或者当服务端返回304时将之前缓存的数据直接返回
③.利用框架合并多个http请求
④.控制请求并发量。对客户端本身,除了上述的实现,我们还需要合理的缓存,控制最大请求并发量,及时取消已失效的请求,过滤重复请求,timeout时间设置,请求优先级设置等
5.代码规范
①.在for loop中不要声明临时变量,不到万不得已不要try catch
②.明白垃圾回收机制,避免频繁GC,OOM
③.合理使用数据类型,比如StringBuilder代替String,(笔试题最常见的是str+=”str”中有几个对象) ,少用枚举enum,少用父类声明。(List,Map)
④.不要频繁的new 线程,可以使用线程池代替
⑤.你要知道单例的好处,并正确使用他
⑥.多用常量,少用显式的”action_key”,并维护一个常量类,别重复声明这些常量。
⑦.如果可以,至少要弄懂策略模式,组合模式,装饰模式,工厂模式,观察者模式。这些可以合理的帮助你解耦合
相关文章推荐
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- Android开发性能优化简介
- Android开发性能优化简介(非常不错的)
- 15—关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- Android开发性能优化简介(非常不错的)
- Android开发中的性能优化
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- Android开发之性能优化概述
- Android开发中的性能优化(摘录:陈彧堃演讲实录)
- Android开发性能优化点
- Android开发性能优化简介(非常不错的)
- 【Android2D游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- Android开发中的性能优化(摘录:陈彧堃演讲实录)
- Android开发性能优化简介
- Android 开发性能优化简介
- Android开发性能优化简介
- Android游戏开发15:详谈OnTouchEvent() 触屏事件的性能优化