布局优化
- 减少布局嵌套层级
- merge 标签使用
- ViewStub延迟加载
- Overdraw有时候是因为你的UI布局存在大量重叠的部分,还有的时候是因为非必须的重叠背景。例如某个Activity有一个背景,然后里面的Layout又有自己的背景,同时子View又分别有自己的背景。仅仅是通过移除非必须的背景图片,这就能够减少大量的红色Overdraw区域
- 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替代
内存泄露建议
- Context使用不当造成内存泄露
- 非静态内部类的静态实例容易造成内存泄漏
- 线程未终止造成的内存泄露
- 对象的注册与反注册没有成对出现造成的内存泄露;譬如注册广播接收器、注册观察者(典型的譬如数据库的监听)等
持续更新中...
网友评论