- 布局优化
1.减少布局层级嵌套
ui布局嵌套超过五层就会显示卡顿,所以减少层级进行UI
2.使用<include> 复用布局
include标签复用避免同样的布局反复创建
3.使用merge 标签合并布局 减少布局层次
merge标签会忽略父容器的包裹实现减少布局层次
4.避免创造不必要的布局层级
父容器内可以实现排列 就不需要在加入一层嵌套
5.使用惰性空间 ViewStub 动态加载布局
ViewStub本身不参与绘制 在使用到的时候才进行绘制 例如 网络请求失败
- 绘制优化
就是避免view在ondraw方法执行大量的操作
1.在onDraw中不要创建局部对象,因为onDraw会被频繁调用 创建大量的临时对象 不仅占用内存还会引起频繁GC 降低程序执行效率
2.官方给出的view绘制标准是每帧的绘制时间不超过16ms 所以在onDraw不做耗时操作 降低onDraw方法的复杂度
- 内存优化
1.内存浪费
使用ArrayMap代替 hashMap
2.内存泄漏
一些不用的对象被长期持有,导致内存无法被释放。
主要的引起内存泄漏的是:
1.内部类引用导致activity泄漏
2.Activity Context被传递到其他实例中,这可能导致自身被引用而发生泄漏。
3.静态造成的内存泄漏
4.还有静态变量持有View
5.注意监听器的注销
6.注意Cursor对象是否及时关闭
7.WebView的引起的泄漏
4.启动页白屏优化
为什么会出现白屏
-
- 当系统启动一个APP时,zygote进程会首先创建一个新的进程去运行这个APP,但是进程的创建是需要时间的,在创建完成之前,界面是呈现假死状态,于是系统根据你的manifest文件设置的主题颜色的不同来展示一个白屏或者黑屏。而这个黑(白)屏正式的称呼应该是Preview Window,即预览窗口。
- 实际上就是是activity默认的主题中的android:windowBackground为白色或者黑色导致的。
- 总结来说启动顺序就是:app启动——Preview Window(也称为预览窗口)——启动页
解决办法
当前启动页添加一个有背景的style样式,然后SplashActivity引用当前theme
主题,注意在该页面将window的背景图设置为空