android8.0正式版已经出了几个月了,当然国内手机如果要升级到8.0可能还需要些时日。但是我们有模拟器呀,所以就想让自己的应用在8.0的系统上面跑一下,前提是得将应用的targetSdkVersion改为27了,否则的话一些8.0的要求不会对app起作用。
然后就下载了一个android 8.0 系统的模拟器,像往常一样子开始运行了,但是已启动就crash了,oh my god,在错误日志中看到了如下的一句信息;Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation,意思就是“只有不透明的全屏activity可以自主设置界面方向”,是的,我们的启动页面是设置了透明,同时也设置了屏幕方向为竖向,首先我们的orientation一定是要设置的了,所以那就只有不让activity透明了,但是当时为啥要让启动页面透明呢?就是为了解决应用启动时候黑屏或者白屏,所以现在要做的就是不让activity透明且让其启动时候不会有黑屏或者白屏了,有同学说直接用另外一种方式呀,就是给启动页面的style设置一个背景图片呀,但是样子在有虚拟返回键的手机上是有问题的,点击应用之后然后当启动页面展示时候,图片的尺寸会有变化,方便的同学可以试试这种方式,所以如果要使用这种方式需要适配虚拟返回键,不是一种特别好的方式。
其实又回到了最初的问题,为啥应用启动会有黑屏或者白屏呢?这是因为用户点击应用图标之后,在应用初始化完成之前会展示一个默认的window,而这个preview window的样式取决于自己启动页的theme是怎样的了,如果是light的就是白屏,如果是black的就是黑屏了。
所以说我们直接禁用这个默认动画不就好了么?所以将原来的windowIsTranslucent改为windowDisablePreview就能起到一样子的效果了,且应用不会崩溃了。