疑難雜症 Android8 1強制豎屏無效

2021-09-23 13:37:26 字數 1464 閱讀 6317

最近公司需要乙個功能,a-activity介面,跳轉到b-activity介面,之後在從b返回到a,其中a介面豎屏,b介面橫屏,理論上很簡單,擼**一氣呵成,測試機型,完全沒有問題。

但是,在**華為p20(andorid8.1),vivo y95(android8.1)**卻出現閃退,b介面返回a介面後,a介面會先橫屏,之後再變為豎屏。

這個問題很奇怪,as並沒有報任何異常,那就從另乙個角度思考,開始監聽a的生命週期,列印log發現,返回a介面時候直接走了ondestroy,也就是說a介面銷毀了,返回邏輯先銷毀a介面,再重新建立a介面,再重新建立時候資源未處理,導致介面崩潰。

先來看下這個屬性:

參考:1.未設定activity的 android:configchanges 時,切屏會重新呼叫各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次

2.設定activity的 android:configchanges=「orientation」 時,切屏還是會重新呼叫各個生命週期,切橫、豎屏時只會執行一次

3.設定activity的 android:configchanges=「orientation|keyboardhidden」 時,切屏不會重新呼叫各個生命週期,只會執行 onconfigurationchanged 方法

android:configchanges="keyboardhidden|orientation|screensize"
崩潰問題果然沒有了,但是橫豎屏切換還是存在,繼續查閱資料。

參考:找了半天,終於找到問題一致,機型一致,心情甭說多愉悅了,於是乎,按照博主的方法,對a、b介面進行更改,執行,測試。

問題依然存在,返回之後a介面還是會先橫屏再豎屏

a介面

android:configchanges="keyboardhidden|orientation|screensize"

android:screenorientation="portrait"

b介面
android:exported="true"

android:screenorientation="landscape"

按照博主的說法,是在b介面也就是橫屏的介面在ondestroy,加上如下**:

if (android.os.build.version.sdk_int >= 27)
仔細想了下,b介面返回到a介面是通過如下方式實現:

setresult();

finish();

根據博主的思路,在以上**新增:

setresult();

finish();

if (android.os.build.version.sdk_int >= 27)

執行,完美解決問題,因為專案緊,原理之後再來梳理,先實現,在重構,感謝以上兩位博主。

Hadoop疑難雜症

前天安裝了pig,本來寫了條pig latin,但一直卡在 17 05 07 17 47 07 info mapreduce.job running job job 1494150363568 0001跑不通,想著肯定是mapredcue自身有問題,於是開始了艱苦的檢錯之旅,從csdn到stackf...

Appium疑難雜症

坑之初體驗 1.session大於60秒沒接收到命令自動關閉 python desired caps 在啟動配置裡面加入newcommandtimeout引數 desired caps newcommandtimeout 200 但是注意cnpm預設在當前目錄安裝npm包。3.uiautomatio...

疑難雜症 列舉

1.列舉是使用者自定義的整數型別 2.關於列舉的一般用法,參照 c 中的列舉 3.從字串中獲取列舉值 定義如下的列舉 public enum timeofday 從乙個字串得到列舉值,並轉換為整數 timeofday time timeofday enum.parse typeof timeofda...