Moosphan / Android-Daily-Interview

:pushpin:每工作日更新一道 Android 面试题,小聚成河,大聚成江,共勉之~

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

2019-06-27:谈谈你是如何优化App启动过程的?

Moosphan opened this issue · comments

2019-06-27:谈谈你是如何优化App启动过程的?

IntentService
JobIntentService

怎么没人回答,我简单说几个思路抛砖引玉

  1. 尽量不要在Application里做耗时操作,能放子线程的放子线程,能延后初始化的延后
  2. 启动页可以做成一个view在主页面加载,同时主页面的一些操作可以在这个过程中开始初始化
  3. 启动页的view层级尽量简单

1.在Application里面不要做太多耗时操作

可以设置启动时背景透明

<style name="SplashTheme" parent="Theme.AppCompat.Light.DarkActionBar"> true true </style>

1、数据准备。如果有首页必须准备好的数据,可以分步骤加载,先加载紧急的数据
2、区分三方库是否可以在子线程初始化,是否必须放在Application中初始化,可以的话先放子线程,或Activity中延迟加载。
3、UI方面,非必要UI的初始化放到其他的时机
4、可以使用IdleHandler 做延迟加载

1.把application oncreate 中要执行的方法 分为同步和异步,尽量去延迟执行 或者使用空闲线程
去初始化一些方法
2.配置一个启动背景,避免白屏或者黑屏,然后做一个空的Activity这个Activity只做一件事,就是跳转到真的Activity,因为 启动速度 和application oncreate的耗时和第一个Activity的绘制有关,
上面都是easy的做法

  1. 利用 redex 工具 优化 dex , 因为 class字节码 分布在不同的dex中,所以启动的时候必须逐个查找一些文件,他们散列分布在不同的dex中,查找起来耗时又不方便,利用redex 把相关的class 放在同一个dex包下,避免 同一个dex包被多次查找

4.在attachedbaseContext中 新起一个进程 去加载 mutildex 可以加速App启动页的打开(可能在启动页中会等待,但是加速了从launcher到启动页的速度)

不要在application里面执行耗时操作 不要在启动的activity里面做耗时操作
启动的View最好简单点

1.把application oncreate 中要执行的方法 分为同步和异步,尽量去延迟执行 或者使用空闲线程 去初始化一些方法 2.配置一个启动背景,避免白屏或者黑屏,然后做一个空的Activity这个Activity只做一件事,就是跳转到真的Activity,因为 启动速度 和application oncreate的耗时和第一个Activity的绘制有关, 上面都是easy的做法

  1. 利用 redex 工具 优化 dex , 因为 class字节码 分布在不同的dex中,所以启动的时候必须逐个查找一些文件,他们散列分布在不同的dex中,查找起来耗时又不方便,利用redex 把相关的class 放在同一个dex包下,避免 同一个dex包被多次查找

4.在attachedbaseContext中 新起一个进程 去加载 mutildex 可以加速App启动页的打开(可能在启动页中会等待,但是加速了从launcher到启动页的速度)
=====================
“做一个空的Activity这个Activity只做一件事,就是跳转到真的Activity,因为 启动速度 和application oncreate的耗时和第一个Activity的绘制”
兄dei,这里不是很理解,启动时间是指从用户点击icon到他看到/能使用APP,做一个空的Activity跳转,你第二个真正要显示的Activity该绘制多久还是多久,这样我理解根本没用啊?求解