Android 启动白屏处理&启动页的配置

# Android 启动白屏

为什么会出现启动白屏?
先来了解两个概念:

  • 冷启动
  • 热启动

# 冷启动

当前要启动的App 没有驻留在系统后台 这时启动 app 需要从头挂起服务 系统创建一个新的进程给该应用初始化走流程

# 热启动

当前要启动的App 系统已有该应用 (举个栗子:按下 back键 退出程序 、home键 回到后台 )该应用的进程还是保留在后台任务中

# 冷启动 热启动的区别

冷启动:系统没有该应用的进程,需要创建一个新的进程分配给应用,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。
热启动: 从已有的进程中来启动,不会创建和初始化Application类,直接创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。

# 冷启动时间计算

API19 之后,系统会出打印日志输出启动的时间;
冷启动时间 = 应用启动(创建进程) —> 完成视图的第一次绘制(Activity内容对用户可见);

# 冷启动流程

Zygote进程中fork创建出一个新的进程;
创建和初始化Application类、创建MainActivity;
inflate布局、当onCreate/onStart/onResume方法都走完;
contentView的measure/layout/draw显示在界面上;
总结:
Application构造方法 –> attachBaseContext() –> onCreate() –> Activity构造方法 –> onCreate() –> 配置主题中背景等属性 –> onStart() –> onResume() –> 测量布局绘制显示在界面上

# 冷启动的优化

减少在Application和第一个Activity的onCreate()方法的工作量;
不要让Application参与业务的操作;
不要在Application进行耗时操作;
不要以静态变量的方式在Application中保存数据;
减少布局的复杂性和深度;

以上原文:author:GexYY
Android冷启动和热启动

# 解决方案

将 Application onCreate() 方法中一些耗时的初始化 方法 放置 IntentService 中 开启一个服务
设置启动页主题 Theme
推荐:
Service和IntentService的区别

    <style name="StartTheme" parent="Theme.AppCompat.Light">
    	<!--启动页背景-->
        <item name="android:windowBackground">@drawable/shape_start_pg</item>
        <item name="android:windowNoTitle">true</item>
        <!--设置全屏模式-->
        <item name="android:windowFullscreen">true</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
# 防止启动页拉伸变形 适配
  • layer-list
    在brawable 文件夹下 新建 layer-list 图层
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
   		<!--背景色-->
        <shape>
            <solid android:color="@android:color/white" />
            <size
                android:width="360dp"
                android:height="640dp" />
        </shape>
    </item>
    <!--启动页Logo 放置位置-->
    <item
        android:bottom="295dp"
        android:left="90dp"
        android:right="90dp"
        android:top="150dp">
        <bitmap
            android:gravity="top"
            android:src="@drawable/icon" />
    </item>
</layer-list>

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.huifeideyema.splash">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:theme="@style/StartTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android启动白屏的问题通常是由几个可能的原因引起的。 首先,可能是由于启动资源加载过多或加载时间过长。启动一般是启动应用程序时的第一个面,如果其中包含大量的图片或其他资源文件,可能会导致加载时间过长,显示为白屏。为了解决这个问题,可以尝试优化资源加载的方式,比如减少资源文件的大小或数量,并尽量异步加载资源。 其次,可能是由于启动逻辑处理过多。如果在启动进行了过多的逻辑处理,比如网络请求、数据库读写等操作,会导致启动一直停留在加载状态,最终显示为白屏。要解决这个问题,可以考虑将一些耗时操作移到后台线程进行,并在处理完成后再跳转到下一个面。 另外,设备性能也可能是造成启动白屏的原因之一。如果设备内存不足或处理器性能较低,可能无法快速加载启动的资源,导致白屏。对于这种情况,可以考虑对资源进行压缩或减少启动的复杂度,以提高面加载速度。 最后,还有可能是由于启动的布局或主题样式设置问题。如果启动的布局或主题样式存在错误或异常,可能导致面无法正确显示,最终呈现为白屏。为了解决这个问题,可以检查启动的布局文件、主题样式文件以及相关的资源引用是否正确,并确保它们能够正确加载和渲染。 综上所述,解决Android启动白屏的问题,需要注意资源加载、逻辑处理、设备性能以及布局样式等方面的因素,以确保面能够正常加载和显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值