美文网首页
【Android性能优化面试题】冷启动、热启动的概念

【Android性能优化面试题】冷启动、热启动的概念

作者: 小城哇哇 | 来源:发表于2023-10-31 17:47 被阅读0次

冷启动、热启动的概念(酷我音乐)

这道题想考察什么?

  1. 是否了解冷启动、热启动的概念与真实场景使用,是否熟悉冷启动、热启动的本质区别?

考察的知识点

  1. 冷启动、热启动的概念在项目中使用与基本知识

考生应该如何回答

应用的启动方式有哪些

通常来说,启动方式分为两种:冷启动和热启动。

第一种:冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。

第二种:热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。

前面冷启动和热启动的特点是:

第一种、冷启动:冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。

第二种、热启动:热启动因为会从已有的进程中来启动,所以热启动就不会走Application这步了,而是直接走MainActivity(包括一系列的测量、布局、绘制),所以热启动的过程只需要创建和初始化一个MainActivity就行了,而不必创建和初始化Application,

因为一个应用从新进程的创建到进程的销毁,Application只会初始化一次。

2.应用的启动过程

冷启动启动流程:当点击app的启动图标时,安卓系统会从Zygote进程中fork创建出一个新的进程分配给该应用,之后会依次创建和初始化Application类、创建MainActivity类、加载主题样式Theme中的windowBackground等属性设置给MainActivity以及配置Activity层级上的一些属性、再inflate布局、当onCreate/onStart/onResume方法都走完了后最后才进行contentView的measure/layout/draw显示在界面上,所以直到这里,应用的第一次启动才算完成,这时候我们看到的界面也就是所说的第一帧。

所以,总结一下,应用的启动流程如下:

Application的构造器方法——>attachBaseContext()——>onCreate()——>Activity的构造方法——>onCreate()——>配置主题中背景等属性——>onStart()——>onResume()——>测量布局绘制显示在界面上。

流程细节如下:

1:点击桌面图标,Launcher会启动程序默认的Acticity,之后再按照程序的逻辑启动各种Activity

2:启动Activity都需要借助应用程序框架层的ActivityManagerService服务进程(Service也是由ActivityManagerService进程来启动的);在Android应用程序框架层中,ActivityManagerService是一个非常重要的接口,它不但负责启动Activity和Service,还负责管理Activity和Service。

3:无论是通过Launcher来启动Activity,还是通过Activity内部调用startActivity接口来启动新的Activity,都通过Binder进程间通信进入到ActivityManagerService进程中,并且调用ActivityManagerService.startActivity接口;

4:ActivityManagerService调用ActivityStack.startActivityMayWait来做准备要启动的Activity的相关信息;

5:ActivityStack通知ApplicationThread要进行Activity启动调度了,这里的ApplicationThread代表的是调用ActivityManagerService.startActivity接口的进程,对于通过点击应用程序图标的情景来说,这个进程就是Launcher了,而对于通过在Activity内部调用startActivity的情景来说,这个进程就是这个Activity所在的进程了;

6:ApplicationThread不执行真正的启动操作,它通过调用ActivityManagerService.activityPaused接口进入到ActivityManagerService进程中,看看是否需要创建新的进程来启动Activity;

7:对于通过点击应用程序图标来启动Activity的情景来说,ActivityManagerService在这一步中,会调用startProcessLocked来创建一个新的进程,而对于通过在Activity内部调用startActivity来启动新的Activity来说,这一步是不需要执行的,因为新的Activity就在原来的Activity所在的进程中进行启动;

8:ActivityManagerServic调用ApplicationThread.scheduleLaunchActivity接口,通知相应的进程执行启动Activity的操作;

9:ApplicationThread把这个启动Activity的操作转发给ActivityThread,ActivityThread通过ClassLoader导入相应的Activity类,然后把它启动起来。

如何解决启动黑白屏问题:

问题一:白屏的问题:

Android studio升级 2.0之后 加上Instant Run,Instant Run为了能够让我们快速部署代码,背后其实是有一套非常复杂的逻辑的,比如要在APK中建立服务器与Android Studio进行通信,以及代码差异比对和替换等,在研发过程中可能出现白屏问题,一般release版的程序是不会出现这种现象的;

如果接下来还会出现白屏问题,可以查看style文件

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    ...... 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowNoTitle">true</item> 
</style>

加入了两个属性,windowIsTranslucent和windowNoTitle,将这两个属性都设置成true,就可以让程序在初始化的时候窗口是透明的,初始化结束后程序主界面才会显示出来,从而也就完全看不到白屏界面了

问题二:启动时间的优化:

我们先测量activity的启动时间-------Activity的reportFullyDrawn()方法

你就需要调用Activity的reportFullyDrawn()。它将在log里报告从apk初始化(和前面Displayed的时间是一样的)到reportFullyDrawn() 方法被调用用了多长时间。

reportFullyDrawn()方法显示的log也是类似这样:

ActivityManager: Displayed com.Android.myexample/.StartupTiming: +768ms

注意:在4.4上调用reportFullyDrawn()方法会崩溃(但是log还是能正常打印),提示需要UPDATE_DEVICE_STATS权限 ,但是这个权限只有系统app才能授权。解决的办法是这样调

try{
    reportFullyDrawn();
}catch(SecurityException e){ 
}

最后

有需要面试题的朋友可以关注一下哇哇,以上都可以分享!!!

相关文章

  • APP性能优化

    一、APP启动性能优化。 APP启动主要分冷启动和热启动,主要优化冷启动。 1.尽量减少didFinishLauc...

  • 性能优化 - 启动时间

    应用的启动分为:冷启动,暖启动和热启动。其中冷启动是我们优化的重点,优化冷启动可能会同时优化暖启动和热启动。 冷启...

  • Android应用性能优化之主页冷启动

    研究工具 1.启动的方式 性能优化是从APP冷启动开始的,这里应该注意区分冷启动和热启动的差别。冷启动:从点击应用...

  • 冷启动和热启动

    一,什么是冷启动和热启动 二,冷启动流程 三,怎么对冷启动进行优化 一,什么是冷启动和热启动 定义:冷启动就是启动...

  • iOS性能优化篇小结(二)

    iOS性能优化篇小结(一) 4. APP启动优化 APP启动可以分为2种: 冷启动:从零开始启动APP 热启动:A...

  • Android超实用最全面试大纲(四)

    文章目录: 冷启动和热启动面试题 其他优化面试题 架构模式面试题 插件化面试题 热更新面试题 进程保活面试题 Li...

  • Android最全面试大纲(四)

    文章目录: 冷启动和热启动面试题 其他优化面试题 架构模式面试题 插件化面试题 热更新面试题 进程保活面试题 Li...

  • 应用启动优化

    1.热启动 与 冷启动 冷启动 首次启动。 热启动 是已经启动,从后台再次唤醒。2.优化冷启动main()函数执...

  • Android性能优化(中)

    Android性能优化 在上一篇中介绍了性能优化的概念、内存泄漏和性能优化方式Android性能优化(上)我们继续...

  • Android性能优化系列--VSYNC

    Android性能优化系列--VSYNC 转载:Android性能优化系列——VSYNC 概念 VSYNC, ve...

网友评论

      本文标题:【Android性能优化面试题】冷启动、热启动的概念

      本文链接:https://www.haomeiwen.com/subject/uyxwidtx.html