1,启动优化
1)通过bootchart分析系统启动情况
2)通过systrace分析系统、应用耗时情况
3)解决白屏问题,同时给予应用已启动的假象。
app启动后,进程的创建需要时间,这之前会显示StartingWindow(也称之为reviewWindow)作为临时窗口,在程序初始化完成后实现目的UI,同时移除这个窗口。
StartingWindow会使用Activity指定的Theme,如果这个Activity没有指定Theme就用Application的,所以我们给Application或Activity的主题设置透明背景或指定图片即可。
4)只加载必要模块,延迟加载;在非UI线程中初始化
5)降低视图层次结构
2,内存优化
1)大方向
profiler + MAT + LeakCanary 检查内存泄漏
profiler + 内存池 解决内存抖动
bitmap加载优化
2)细节
OnTrimMemory / onLowMemory 防止应用被干掉
谨慎使用外部库
优化业务架构
内存泄漏需要重点注意:
1、对于生命周期比Activity长的对象如果需要应该使用ApplicationContext,在需要使用Context参数的时候先考虑Application.Context.
2、在引用组件Activity,Fragment时,优先考虑使用弱引用。
3、在使用异步操作时注意Activity销毁时,需要清空任务列表,如果有使用集合,将集合清空并置空,释放相应的资源。
4、内部类持有外部类的引用尽量修改成静态内部类中使用弱引用持有外部类的引用。
5、 留意活动的生命周期,在使用单例,静态对象,全局性集合的时候应该特别注意置空。
网友评论