相信每个app都需要一个闪屏页 就是一个开始页面 对于新手来说 可能就直接一个activity 弄个背景图片 ,细心地同学也许会发现 每次启动 应用程序的时候 一开始显示的不是那个设置的背景图片 而是白色或黑色背景 可能时间很短 这是为什么呢 。再看看其他市面上的应用都是一开始就是显示背景图片 而没有白色背景 研究了很久 其实 设置一下主题就行了 给activity设置主题 属性
进阶
应用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绘制完毕),在博客( )中了解到,在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的闪屏页时间.),优化用户体验。