调整targetSdkVersion至设备OS版本后应用行为及异常咨询
首先直接给你结论:把targetSdkVersion从27降到设备对应的API26(Android 8.0),你的应用大部分功能行为不会发生变化,但刚好能解决你遇到的屏幕方向异常问题,同时有几个关键细节需要留意:
解除API27引入的行为限制:你碰到的
java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation异常,是API27(Android 8.1)新增的规则——禁止非全屏、非不透明的Activity强制设置屏幕方向。虽然你的设备是API26(原生没有这个规则),但当targetSdkVersion高于设备OS版本时,系统会提前启用高版本的兼容性检查,所以才触发了这个异常。一旦把targetSdk降到26,这个限制就会完全消失,你的对话框式Activity设置android:screenOrientation就不会再报错了。现有功能不受影响:因为你的设备本身运行在API26,即使之前targetSdk是27,你也无法调用API27新增的API(会引发运行时错误),所以降到26后,你当前使用的所有API26及以下的功能,行为和之前完全一致,不会有任何破坏性改变。
回退到API26的行为规则:API27对权限、后台操作等有一些细微调整(比如更严格的后台位置权限限制),降到26后,应用会完全遵循API26的原生规则,这些高版本的限制就不再生效,对你的应用来说是更贴合当前设备环境的运行状态。
简单来说,这个调整对你的应用是安全的,核心作用就是解决你遇到的屏幕方向异常,其他功能不会有明显变化。
内容的提问来源于stack exchange,提问作者nks

