Android 应用启动优化

2021-05-12  本文已影响0人  maybe0813

Android 应用启动优化

Android 应用的启动时间长短是衡量应用性能的指标之一,是用户对应用的第一印象,其重要性不言而喻。

启动状态

应用启动状态主要有3种,一般来说冷启动耗时较长,启动优化主要是优化冷启动时间,这样做也可以提升温启动和热启动的性能。

应用启动流程

启动流程图.png
  1. 点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;
  2. system_server进程接收到请求后,向zygote进程发送创建进程的请求;
  3. Zygote进程fork出新的子进程,即App进程;
  4. App进程,通过Binder IPC向sytem_server进程发起attachApplication请求;
  5. system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheduleLaunchActivity请求;
  6. App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息;
  7. 主线程在收到Message后,通过反射机制创建目标Activity,并回调Activity.onCreate()等方法。
  8. 到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。

启动时间

启动时间跟手机性能有关,主流旗舰机型启动时间保持在 2S 内为佳

启动耗时统计

启动耗时统计有两种途径

日志查看启动时间.png adb统计启动时间.png

我们一般关注TotalTime(表示新应用启动的耗时,包括新进程的启动和Activity的启动,但不包括前一个应用Activity pause的耗时),

启动状态LaunchState有4种情况:

问题诊断

查看火焰图.png 查看耗时方法.png

4.优先查看耗时较长的方法并分析代码,遵循性能优化方法,例如:

启动黑白屏问题

当系统加载并启动 App 时,需要耗费相应的时间,这样会造成用户会感觉到当点击 App 图标时会有 “延迟” 现象,为了解决这一问题,Google 的做法是在 App 创建的过程中,先展示一个空白页面,让用户体会到点击图标之后立马就有响应。

如果application或activity启动的过程太慢,导致系统的BackgroundWindow没有及时被替换,就会出现启动时白屏或黑屏的情况(取决于Theme主题是Dark还是Light)。

消除启动时的黑/白屏问题,大部分App都采用自己在Theme中设置背景图的方式来解决。

1.定义主题

<style name="AppTheme.Launcher"> 
        <item name="android:windowBackground">@drawable/bg</item> 
</style> 

2.启动页使用主题

<activity android:name=".activity.SplashActivity" 
          android:screenOrientation="portrait" 
          android:theme="@style/AppTheme.Launcher"> 
  <intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
  </intent-filter> 
</activity>

3.启动页还原为应用主题

@Override 
protected void onCreate(Bundle savedInstanceState) { 
//替换为原来的主题,在onCreate之前调用 
  setTheme(R.style.AppTheme); 
  super.onCreate(savedInstanceState); 
}
上一篇 下一篇

猜你喜欢

热点阅读