性能优化方方面面

2020-05-30  本文已影响0人  陆元伟

布局优化

  1. 减少布局嵌套层级
  2. merge 标签使用
  3. ViewStub延迟加载
  4. Overdraw有时候是因为你的UI布局存在大量重叠的部分,还有的时候是因为非必须的重叠背景。例如某个Activity有一个背景,然后里面的Layout又有自己的背景,同时子View又分别有自己的背景。仅仅是通过移除非必须的背景图片,这就能够减少大量的红色Overdraw区域
  5. ondraw方法不需要创建新的局部对象,这是因为ondraw方法是实时执行的,这样会产品大量的临时对象,导致占用了更多内存,并且使系统不断的GC。降低了执行效率。

第三方库懒加载

很多第三方开源库都说在Application中进行初始化,十几个开源库都放在Application中,肯定对冷启动会有影响,所以可以考虑按需初始化,例如Glide,可以放在自己封装的图片加载类中,调用到再初始化,其它库也是同理,让Application变得更轻

WebView启动优化

WebView第一次创建比较耗时,可以预先创建WebView,提前将其内核初始化。使用WebView缓存池,用到WebView的地方都从缓存池取,缓存池中没有缓存再创建,注意内存泄漏问题。

线程优化

Asynctask:为UI线程与工作线程之间进行快速处理的切换提供一种简单便捷的机制。适用于当下立即需要启动,但是异步执行的生命周期短暂的场景。
HandlerThread:为某些回调方法或者等待某些执行任务的执行设置一个专属的线程,并提供线程任务的调度机制。
ThreadPool:把任务分解成不同的单元,分发到各个不同的线程上,进行同时并发处理。
IntentService:适合执行由Ui触发的后台任务。并可以把这些任务执行的情况通过一定的机制反馈给UI。

其他

ArrayMap及SparseArray 替换HashMap
SparseArray比HashMap省内存是因为它避免了对Key进行自动装箱(int转Integer)

String拼接-->StringBuilder/StringBuffer替代

内存泄露建议

  1. Context使用不当造成内存泄露
  2. 非静态内部类的静态实例容易造成内存泄漏
  3. 线程未终止造成的内存泄露
  4. 对象的注册与反注册没有成对出现造成的内存泄露;譬如注册广播接收器、注册观察者(典型的譬如数据库的监听)等

持续更新中...

上一篇 下一篇

猜你喜欢

热点阅读