Only fullscreen opaque activities can request orientation 最好的解析
好好的应用按到华为8.0上就崩溃了,感觉非常无语,解决的时候,查了一下资料发现虽然很多人都遇见过,但是总结的并不全面,有一些还是有问题的。所以特意将这个崩溃,从源码级别给大家分析一下,让大家知其然,知其所以然。
先上解决方案,后面是源码级的触发原理。
解决方案:
- 适配版本不大于26(显然不合适)
- 不设置
- windowIsTranslucent
- windowSwipeToDismiss
-
windowIsFloating
为 true
首先我们先看下:Only fullscreen opaque activities can request orientation
必现条件:
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize"
android:screenOrientation="landscape"
android:theme="@style/ActivityTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<style name="ActivityTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowIsTranslucent">false</item>
</style>
没错仅需要这两个条件即可在8.0上发生这个崩溃。
官方源码判定条件:
根据崩溃日志:
Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
at android.app.Activity.onCreate(Activity.java:1081)
at androidx.core.app.ComponentActivity.onCreate(ComponentActivity.java:85)
at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:149)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:313)
at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:115)
at com.xjl.screenrotationtest.MainActivity.onCreate(MainActivity.kt:28)
可以知道,崩溃点发生在Activity的onCreate方法中。
第一层判定条件:
- 适配的版本大于26
- 请求了屏幕方向
再看一下 isTranslucentOrFloating 的判定源码:
这里面的判定条件有三个都和Style有关:
- 当前Window是否是透明的 :windowIsTranslucent
- 当前Window是否是右滑退出 :windowSwipeToDismiss
- 当前Window是否是悬浮的 :windowIsFloating
如果你抱有怀疑态度,那么我已经为大家实验过了,实验结果非常的准确。
只要我们设置了屏幕方向,并在Style中出现以上三个属性之一并设置为true时就会发生这个崩溃。
注意事项:
虽然报错信息是 Only fullscreen opaque activities can request orientation 但是从源码中我们可以知道和是否全屏是没有关系的!
经测试适配版本大于26时不管是否开启windowFullscreen属性只要windowIsTranslucent为true,并请求方向就会崩溃!
上一篇: 完整java开发中JDBC连接数据库代码和步骤 博客分类: JDBC jdbc
下一篇: 调用Popup时发生is your activity running 博客分类: 异常处理 Android UI 特效Android 开发Popup
推荐阅读
-
Only fullscreen opaque activities can request orientation 最好的解析
-
java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation问题解决
-
Only fullscreen opaque activities can request orientation错误记录
-
java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation问题解决
-
Only fullscreen opaque activities can request orientation错误记录