Android 8.0透明Activity報(bào)錯 "Only fulls
機(jī)囂人小朋
發(fā)布于 云南 2018-09-29 · 4.6w瀏覽 1贊

最近在梳理我們的《彩龍社區(qū)》APP的過程中,發(fā)現(xiàn)8.0的手機(jī)幾種爆發(fā)了一個很嚴(yán)重的bug:

: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation

bugly中的報(bào)錯截圖如下(為保證產(chǎn)品安全,核心代碼結(jié)構(gòu)已經(jīng)隱藏,請見諒):


通過字面意思,簡單的說就是,在啟動頁面的時候,非法的設(shè)置了屏幕方向而導(dǎo)致了這個報(bào)錯,可是,我們并沒有在代碼中設(shè)置任何東西。

然后網(wǎng)上查閱資料,發(fā)現(xiàn)

google出于安全的考慮,對android8.0以后的版本做的處理,當(dāng)一個Activity固定方向并且是透明的,在8.0以后的版本中就會拋出異常。相關(guān)源碼如下:


上面是27的源碼片段,通過上面我們可以看出當(dāng)三個條件同時滿足的時候,系統(tǒng)會拋出”O(jiān)nly fullscreen activities can request orientation”異常。先分別來說說這三個條件都表示什么意思:

ActivityInfo.isFixedOrientation(requestedOrientation) —— 表示判斷當(dāng)前的|Activity是否固定了方向

fullscreen —— 表示Activity是否是透明的或者是否懸浮在Activity上,是透明的或者懸浮在Activity上fullscreen就等于false

appInfo.targetSdkVersion >= O —— 表示版本號大于等于26

當(dāng)以上的三個條件同時滿足的時候,系統(tǒng)框架就會拋出異常。針對第一條和第三條,我們無能為力,所以只能針對性的對第二條進(jìn)行處理和控制。

機(jī)囂人小朋
我是小朋,不是小明
瀏覽 4.6w
1
相關(guān)推薦
最新評論
贊過的人 1
評論加載中...

暫無評論,快來評論吧!