title: 填坑--小米6X橫豎屏切換
date: 2018-06-30 15:52:45
categories:
- Android
tags: - 橫豎屏切換
話說,事出反常必有妖~
測(cè)試場(chǎng)景:測(cè)試手機(jī)小米6X,Activity A 為設(shè)備通道列表界面,其屏幕方向指定為portrait,其在AndroidManifest.xml中聲明如下:
android:name=".module.channelNew.VideoChannelActivity"
android:screenOrientation="portrait"/>
Activity B為視頻播放界面羽杰,其屏幕方向指定為橫屏landscape,其聲明如下:
<activity
android:name=".module.videoplay.VideoPlayActivity"
android:screenOrientation="landscape"/>
在大部分手機(jī)上測(cè)試语泽,包括機(jī)型:小米6,華為nova3e, 小米2s 都符合正撑渑遥現(xiàn)象:視頻播放結(jié)束后,返回上個(gè)界面惠毁,屏幕由橫屏切換為豎屏犹芹。一切都符合程序員的思維邏輯,在我手機(jī)上明明沒有問題的啊~~然而鞠绰,事情開始變得有趣了腰埂,在小米6X上居然崩潰了,查看log發(fā)現(xiàn):在返回上個(gè)界面即Activity A的時(shí)候,先銷毀了Activity A,然后重新創(chuàng)建蜈膨,在重新創(chuàng)建的時(shí)候由于對(duì)資源沒處理好屿笼,導(dǎo)致程序崩潰。
不得不說翁巍,Android系統(tǒng)碎片化很夸張驴一,總能遇到各種奇怪的問題 ,查了資料灶壶,是在AndroidMainifest.xml中設(shè)置了android:screenOrientation = "portrait"后照理再設(shè)置
android:configChanges="orientation|screenSize|keyboardHidden"
應(yīng)該不起效的肝断,所以之前也并沒有考慮設(shè)置這個(gè)。沒辦法,有bug總得解決胸懈,不能抱著僥幸的心態(tài)假想客戶不是用小米6X的鱼蝉。。箫荡。
所以著手處理:先添加了上述代碼:
android:configChanges="orientation|screenSize|keyboardHidden"
重新運(yùn)行魁亦,居然不會(huì)掛了!8岬病洁奈!內(nèi)心本是有點(diǎn)小激動(dòng),但很快就發(fā)現(xiàn)了另一個(gè)現(xiàn)象绞灼。利术。。此處有g(shù)if圖:
gif圖可能有點(diǎn)模糊低矮,跳轉(zhuǎn)太快印叁,沒關(guān)系,待我慢慢道來:
首先是視頻播放界面Activity B军掂,按了回退返回上個(gè)界面Activity A(設(shè)備通道列表界面)轮蜕,此時(shí)ActivityA是豎屏的,但一秒后切換為橫屏了蝗锥,然后一秒后又切換為豎屏了跃洛,切得你無話可說,估計(jì)用戶看到這一幕,存在感就--1了终议。
有現(xiàn)象了汇竭,就先從logcat去入手,首先在ActivityA加入如下代碼:
@Override
public void onConfigurationChanged(Configuration newConfig) {
//0--undefined,1--portrait,2--landscape
super.onConfigurationChanged(newConfig);
Log.e(TAG, "onConfigurationChanged: " + newConfig.getLayoutDirection());
}
然后查看logcat:
發(fā)現(xiàn)是在視頻播放界面ActicvityB調(diào)用onDestroy后穴张,ActivityA回調(diào)了兩次onConfigurationChanged细燎,而且打出的getLayoutDirection居然都是未定義0。
結(jié)合剛剛上面的Gif圖皂甘,ActivityA明明已經(jīng)切換為豎屏了(其生命周期已經(jīng)是onResume了)玻驻,后面還切換了兩次屏幕,就對(duì)應(yīng)上這里的兩次回調(diào)叮贩。那不讓其回調(diào)不就不會(huì)出現(xiàn)上述問題了击狮?
接著嘗試:在ActivityB的onDestroy中添加如下代碼
@Override
protected void onDestroy() {
//@modify 針對(duì)一些手機(jī)切換到上個(gè)界面后佛析,橫豎屏多次切換的問題
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
... ...
}
然后重新運(yùn)行益老,問題解決了 ^_^
總結(jié)一下:主要是一些手機(jī)系統(tǒng)定制比較特殊,如果你也遇到了類似的問題寸莫,有不同的解決方法捺萌,歡迎共同交流 ^_^