启动黑白屏优化
前言
这是Google设计者为了让用户体会到点击图标后立马就有响应,而让App创建的过程中先展示一个空白窗口。
正是这个设计,我们在点击App应用图标之后,会看到一段时间的空白屏幕,这就是所谓的安卓应用启动白屏。
总结就是,谷歌设计App启动的时候有一个预览的界面,在应用完成启动初始化之前都会显示这个预览界面,目的是为了让用户点击APP图标的时候有一个瞬间响应的交互体验。
而这个预览界面是由我们app应用主题android:theme中的android:windowBackground属性决定的,当我们不指定的时候android:windowBackground的时候默认是一个近乎白色的颜色#fffafafa。
优化
方案一 去掉这个默认的白色背景效果的方法
<!-- 方案1 (以下二选一)直接将预览页面去掉或者改为透明 缺点:同样还是让用户感觉“卡顿”;-->
<item name="android:windowDisablePreview">true</item>
<item name="android:windowIsTranslucent">true</item>
方案二 给主题设置一个自定义的背景
<!-- 方案2 -->
<item name="android:windowBackground">@mipmap/ic_launcher</item>
方案三 自定义主题
<!-- 方案3(终极版本) -->
<style name="Theme.Mnstartopt.LauncherTheme2">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowBackground">@drawable/splash_preview</item>
</style>
将此主题用在activity上
<activity android:name=".SplashActivity"
android:theme="@style/Theme.Mnstartopt.LauncherTheme2">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
启动时间的测量
系统日志输出
获取启动时间1: Displayed com.mnstartopt/.SplashActivity: +955ms 通过系统获取启动时间;
ADB 命令
//adb命令获取启动时间2: adb shell am start -W com.mnstartopt/.SplashActivity
// launch:COLD,WARM,HOT
// ThisTime: 925 代表最后一个Activity启动时间;
// TotalTime:925 代表所有Activity的启动时间;
// WaitTime: 977 所有时间:ams启动activity总耗时;
手动获取
@Override
public void onCreate() {
super.onCreate();
// 方法耗时统计
Debug.startMethodTracing("Launcher");
coreSize = Runtime.getRuntime().availableProcessors();
executorService = Executors.newFixedThreadPool((Math.max(2,Math.min(coreSize-1,4))));
a();//3s
application = this;
context = this.getApplicationContext();
Debug.stopMethodTracing();
async(new Runnable() {
@Override
public void run() {
a();
}
});
// 启动优化 一定是减少时间;
// 有些资源懒加载,异步加载;
// 并不是所有资源都能这么做;资源要用,没初始化完怎么办?
// 如果你初始化的资源跟UI线程有关,也不能放在子线程;
// 1:把资源拆分;
}
分析如下图
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)