android 内存优化(二) 性能优化

1)减少view层级,约束布局,相对布局,尽可能减少布局层次
2)<include>和<merge> view可见的时候才用,用viewstub加载不占资源 
3)避免创建不必要的对象
4)图片像素对应的到相应的xdpi目录
5)循环中尽量用int变量赋值遍历,不要老是getsize之类的,循环调用效率低
6)SparseArray比hashmap效率高
7)string与stringbuffer
8)对常量使用static final修饰符
9)for(a:array){}
10)多使用系统封装好的API string字符运算 indexOf() contains 数组拷贝System.arraycopy() 效率比自己写的逻辑效率高
11)避免在内部调用Getters/Setters方法 直接赋值拿值效率高些
12)少使用枚举 占资源
13)内存抖动-短时间内大量的创建垃圾对象,触发GCC,卡顿,
尽量避免在循环体内创建对象,应该把对象创建移到循环体外。
注意自定义View的onDraw()方法会被频繁调用,所以在这里面不应该频繁的创建对象。
当需要大量使用Bitmap的时候,试着把它们缓存在数组中实现复用。
对于能够复用的对象,同理可以使用对象池将它们缓存起来。
主线程不要放耗时操作
GC是无法避免的,我们要避免的是频繁的GC,因此这里的优化实质上是内存优化
14)Executor、 AsyncTask、 HandlerThead、 IntentService 如何选择
HandlerThead就不要用,HandlerThead设计目的就是为了主界面死循环刷新界面,无其他应用场景.
能用线程池就用线程池,因为最简单.
涉及后台线程推送任务到UI线程,可以使用Handler或AsyncTask
Service:就是为了做后台任务,不要UI界面,需要持续存活.有复杂的需要长期存活/等待的场景使用Service.
IntentService:属于Service.当我们需要使用Service,且需要后台代码执行完毕后该Service自动被销毁,使用IntentService.
15)强引用 软引用 弱引用 
强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。
如果一个对象只具有弱引用,那么在垃圾回收器线程扫描的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。弱引用也可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。
弱引用与软引用的根本区别在于:只具有弱引用的对象拥有更短暂的生命周期,可能随时被回收。而只具有软引用的对象只有当内存不够的时候才被回收,在内存足够的时候,通常不被回收。

https://blog.csdn.net/u010672559/article/details/103178632 android 内存优化(一) 防止内存泄漏注意事项

https://blog.csdn.net/u010672559/article/details/103178663 android 内存优化(二) 性能优化

https://blog.csdn.net/u010672559/article/details/81098534 android 内存优化(三) 内存优化工具-MAT的使用及实例分析

https://blog.csdn.net/u010672559/article/details/81223122 android 内存优化(四) 性能优化-Systrace分析UI性能-含demo

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值