闪屏页设置

相信每个app都需要一个闪屏页 就是一个开始页面  对于新手来说 可能就直接一个activity 弄个背景图片 ,细心地同学也许会发现 每次启动 应用程序的时候 一开始显示的不是那个设置的背景图片  而是白色或黑色背景 可能时间很短 这是为什么呢 。再看看其他市面上的应用都是一开始就是显示背景图片 而没有白色背景  研究了很久 其实 设置一下主题就行了  给activity设置主题 属性

<!-- Base application theme. -->
<style name="AppTheme" parent="QMUI.Compat.NoActionBar">
    //闪屏页图片
    <item name="android:windowBackground">@mipmap/splashscreen</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

进阶

应用App通常会设置一个固定的闪屏页展示时间,例如2000ms,所以我们可以根据用户手机的运行速度,对展示时间做出调整,但是总时间仍然为 2000ms。

闪屏页政展示总时间 = 组件初始化时间 + 剩余展示时间。

也就是2000ms的总时间,组件初始化了800ms,那么就再展示1200ms即可。

 Application 初始化后会调用 attachBaseContext() 方法,再调用 Application 的 onCreate(),再到入口 Activity的创建和执行 onCreate() 方法。所以我们就可以在 Application 中记录启动时间。

//记录Application初始化时间
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        SPUtil.putLong("application_attach_time", System.currentTimeMillis());
//        Log.e("TAG", "attachBaseContext: "+System.currentTimeMillis() );
    }

有了启动时间,我们得知道入口的 Acitivty 显示给用户的时间(View绘制完毕),在博客( View的工作流程)中了解到,在onWindowFocusChanged()的回调时机中表示可以获取用户的触摸时间和View的流程绘制完毕,所以我们可以在这个方法里记录显示时间。

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);

        if (SPUtil.cha("application_attach_time")){
            long appAttachTime = SPUtil.getLong("application_attach_time");
            //从application到入口Acitity的时间
            diffTime = System.currentTimeMillis() - appAttachTime;
//            Log.e("TAG", "onWindowFocusChanged: "+diffTime );
        }
    }

所以我们就可以动态的设置应用闪屏的显示时间,尽量让每一部手机展示的时间一致,这样就不会让手机配置较低的用户感觉漫长难熬的闪屏页时间(例如初始化了2000ms,又要展示2000ms的闪屏页时间.),优化用户体验。

猜你喜欢

转载自my.oschina.net/u/3698786/blog/2088031