Android 启动页面优化 (白屏 、等待的问题)

Android 启动优化


android 启动优化

Material Design 启动屏幕

  • 问题1:点击应用图标后等待时间较长
    原因:在应用第一次启动(系统杀掉应用的进程的时候)到Activity的onCreate需要一段时间,具体的流程如下
    开始加载并启动应用;
    应用启动后,显示一个空白的启动窗口;
    创建应用进程信息;

初始化应用中的对象 (比如 Application 中的工作);
启动主线程 (UI 线程) ;
创建第一个 Activity;
加载内容视图 (Inflating) ;
计算视图在屏幕上的位置排版 (Laying out);
绘制视图 (draw)。

  • 问题2:进入启动页前会先白屏一下
    消灭白屏的做法 在主题中设置透明即可
    白屏跟主题的设置有关,也有可能是黑色的。
    例如:
    

对于上面的两个问题具体的优化方式

根据Material Design 设计规范中讲到的 启动屏进行了如下优化:

  • 首先定义一个drawable 用于设置主题背景(android:windowBackground)

<layer-list
    android:opacity="opaque"
    xmlns:android="http://schemas.android.com/apk/res/android">
    
    <item android:drawable="@color/colorPrimaryDark"/>
    
    
        
             
    

    <item >
        <bitmap android:src="@drawable/splash_icon"
            android:gravity="center"/>
    item>

layer-list>

的相关设置可以参考官方说明,layer_list


示例代码:


<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
      <bitmap android:src="@drawable/android_red"
        android:gravity="center" />
    item>
    <item android:top="10dp" android:left="10dp">
      <bitmap android:src="@drawable/android_green"
        android:gravity="center" />
    item>
    <item android:top="20dp" android:left="20dp">
      <bitmap android:src="@drawable/android_blue"
        android:gravity="center" />
    item>
layer-list>

这里要注意的地方

默认情况下,所有可绘制项都会缩放以适应包含视图的大小。因此,将图像放在图层列表中的不同位置可能会增大视图的大小,并且有些图像会相应地缩放。为避免缩放列表中的项目,请在 < item> 元素内使用 < bitmap> 元素指定可绘制对象,并且对某些不缩放的项目(例如 “center”)定义重力。例如,以下 < item> 定义缩放以适应其容器视图的项目:

<item android:drawable="@drawable/image" />

为避免缩放,以下示例使用重力居中的 元素:

<item>
  <bitmap android:src="@drawable/image"
          android:gravity="center" />
item>
  • 添加splash主题
    
  • 在manifest 中进行设置(注意这里不是在application的标签中设置主题,因为我们只要第一个activity启动的时候有这个效果就可以了)
  <activity android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/splash"
        android:configChanges="orientation|keyboardHidden|screenSize|screenLayout">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            intent-filter>
        activity>
  • 启动完成运行到Activity 中的 onCreate 的时候再将主题改回来(setTheme())
@Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.AppTheme_NoActionBar);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
}

关注微信公众号,每天都有优质技术文章,搞笑GIF图片推送哦。
Android 启动页面优化 (白屏 、等待的问题)_第1张图片

你可能感兴趣的:(Android)