Android冷启动优化

一、应用启动的三种状态

冷启动:系统不存在App进程(APP首次启动或APP被完全杀死)时启动APP,此时,APP的启动将经历两个阶段:

1、创建app进程:系统启动应用程序进程和虚拟机,创建app进程,app启动后第一时间显示空白window

2、创建应用程序对象、初始化、加载资源:创建application对象、创建主Activity对象、并执行onCreate方法、创建和显示应用程序主界面。

热启动:当我们按了Home键或其它情况app被切换到后台,再次启动app的过程。热启动是指应用程序在保留应用程序进程的情况下再次启动的启动方式,这种启动方式相对于冷启动要快得多,因为应用程序的许多资源和进程已经存在于系统内存中,不再需要重新创建和加载。

温启动:温启动包含了冷启动的一些操作,由于app进程依然在,温启动只执行冷启动的第二阶段,这代表着它比热启动有更多的开销。
这三种启动状态中,冷启动是一个从无到有的过程最为耗时,也是下面主要的优化方向

二、冷启动优化方式

1、冷启动白屏优化

在app启动之后会立即展示一个空白的window,用于告诉用户当前正在启动app,但是这种方式显然不够美观,下面介绍两种方式对这种现象进行优化

1、禁用app启动时window预览功能(不显示空白的window)

在首屏Activity中添加一个主题,禁用window预览功能,并在manifest中使用

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

    </style>

    <!--禁用预览功能主题-->
    <style name="AppSpalshNoPreviewTheme" parent="AppTheme">
    	<item name="android:windowFullscreen">true</item>
        <item name="windowNoTitle">true</item>
        //禁用预览
        <item name="android:windowDisablePreview">true</item>
    </style>
</resources>

在manifest中使用

<activity android:name=".SplashActivity"
        android:theme="@style/AppSpalshNoPreviewTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

此时冷启动app,会卡顿一会再进入首activity,感觉就像手机卡了,用户体验不是很好,不建议使用!
2、给启动页Activity添加一个主题,设置一个背景

<!--替换首屏的背景的主题-->
    <style name="AppSpalshBackgroundTheme" parent="AppTheme">
        <!--设置一个背景图片-->
        <item name="android:windowBackground">@mipmap/wall</item>
        <item name="android:windowFullscreen">true</item>
        <item name="windowNoTitle">true</item>
    </style>

然后在manifest中使用

<activity android:name=".SplashActivity"
        android:theme="@style/AppSpalshBackgroundTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

此时白屏就会被替换成首Activity主题中添加的背景图片,从而使程序更加美观,也会让用户有更好的体验

3、使用jetpack splashScreen

参考:深度探讨 Jetpack SplashScreen 如何重塑应用启动画面_setkeepvisiblecondition-CSDN博客

2、主页面布局优化

1、减少布局嵌套层次,复杂布局可以使用ConstraintLayout和RelativeLayout来替换LinearLayout

2、推荐使用merge标签,可以减少一个层级

3、使用ViewStub延迟加载

<ViewStub
        android:id="@+id/contentPanel"
        android:inflatedId="@+id/inflatedStart"
        android:layout="@layout/delayInflateLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        />

4、去掉多余背景色,减少复杂shape的使用

3、Application和主Activity的onCreate方法中的操作优化

1、Application的onCreate流程,对于大型的APP来说,通常会在这里做大量的通用组件的初始化操作;建议:一些三方的SDK,文件,设备,线程池,等等工具类不放在Application初始化,我们可以放到用到的地方才进行初始化操作。如果确实需要在这里初始化,可以开启一个子线程来初始化

2、不要在Application和主Activity的onCreate方法中执行耗时操作。

相关推荐

  1. Android启动优化

    2024-03-23 19:50:05       38 阅读
  2. iOS应用启动优化,可以做哪些事情

    2024-03-23 19:50:05       22 阅读
  3. Android APP启动优化

    2024-03-23 19:50:05       37 阅读
  4. Android启动优化

    2024-03-23 19:50:05       35 阅读
  5. Android启动优化

    2024-03-23 19:50:05       39 阅读
  6. Android app启动优化 2

    2024-03-23 19:50:05       56 阅读
  7. android 启动优化方向跟踪

    2024-03-23 19:50:05       33 阅读
  8. ,热,温启动

    2024-03-23 19:50:05       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 19:50:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 19:50:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 19:50:05       82 阅读
  4. Python语言-面向对象

    2024-03-23 19:50:05       91 阅读

热门阅读

  1. 密码学——传统加密技术和公钥加密

    2024-03-23 19:50:05       31 阅读
  2. 第十一届蓝桥杯省赛第一场真题

    2024-03-23 19:50:05       41 阅读
  3. 【tips】Git使用指南

    2024-03-23 19:50:05       34 阅读
  4. 每天学习一个Linux命令之groupadd

    2024-03-23 19:50:05       42 阅读
  5. 基于Docker+shell生成动态的nginx配置文件

    2024-03-23 19:50:05       42 阅读
  6. TCP/IP

    TCP/IP

    2024-03-23 19:50:05      42 阅读
  7. 力扣由浅至深 每日一题.12 二进制求和

    2024-03-23 19:50:05       35 阅读
  8. web开发_基础

    2024-03-23 19:50:05       39 阅读
  9. [接口生成] 1. 数据库生成

    2024-03-23 19:50:05       37 阅读
  10. 练习5-丢弃法(包含部分丢弃法理解)

    2024-03-23 19:50:05       37 阅读
  11. C++ 小玉在游泳

    2024-03-23 19:50:05       38 阅读
  12. Python学习笔记03

    2024-03-23 19:50:05       34 阅读
  13. 一个简单的前端微服务部署--qiankun

    2024-03-23 19:50:05       38 阅读