闪屏页设置

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

<style name="Appstyle" parent="AppTheme">
    //闪屏页图片
    <item name="android:windowBackground">@mipmap/splashscreen</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

进阶app

应用App一般会设置一个固定的闪屏页展现时间,例如2000ms,因此咱们能够根据用户手机的运行速度,对展现时间作出调整,可是总时间仍然为 2000ms。ide

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

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

 Application 初始化后会调用 attachBaseContext() 方法,再调用 Application 的 onCreate(),再到入口 Activity的建立和执行 onCreate() 方法。因此咱们就能够在 Application 中记录启动时间。.net

//记录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的流程绘制完毕,因此咱们能够在这个方法里记录显示时间。code

@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的闪屏页时间.),优化用户体验。blog

相关文章
相关标签/搜索