启动Activity前的黑屏

在启动的Activity的onCreate里面做了太多的事情导致初始化activity太慢

  • onCreate做到精简,如果实在不行那就开异步任务,这样onCreate就不会因为执行太多任务都卡住,可以顺利的回调下面的生命周期,因为activity是在onResume的时候才是可视的

在start下一个activity的下一句代码马上就finish当前的activity

  • 其实一般情况下,这种是不会造成启动activity前黑屏的,但是我们的项目中确认遇到了,所以我们的解决方案是在onAttachedToWindow方法中把上一个activity给finish掉,这样就不会黑屏了,不能在onCreate或者onResume方法中finish掉上一个activity,依然会黑屏,因为onCreate调用的时候activity还在初始化,并不可见,而onResume是activity刚刚可见,但是还没有依附于窗体,通过在onResume方法中去获取控件的长宽都是0就可以知道,这时候activity其实还并不是我们平常看到的那个真实的activity界面状态,而onAttachedToWindow回调里面的控件长宽就不是0了,这时候整个activity已经是依附与窗体了,onAttachedToWindow生命周期也比onResume晚调用

其实上面finish造成的启动activity黑屏的真正原因是activity全屏设置

  • getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);如果把这句代码去掉之后,黑屏自然消失

网上的解决启动activity黑屏的方法

  • 通过设置activity的theme模式来把黑屏变成透明,这种会造成点击了app之后,要过一会儿才能看到activity启动界面,直观上感觉启动比较慢
  • 通过设置activity的theme模式把windowBackground设置成一张背景图片,这种方式还是不错的,但是还有一个缺点,点击app之后可以马上看到activity启动背景图,但是要过两秒之后才会执行到这个activity的onCreate方法,所以会感觉在启动界面停留太久时间,加上初始化3秒,一共大概5秒,在启动界面停留5秒的时间,确实感觉太久了

猜你喜欢

转载自blog.csdn.net/lhd201006/article/details/53705892