你还在问android横竖屏切换的生命周期?
本文原創(chuàng),轉(zhuǎn)載請注明來自xiaoQLu?http://www.cnblogs.com/xiaoQLu/p/3324503.html
開源幫助android獲得了飛速的發(fā)展,開源也導致了數(shù)不清的碎片問題。android的前期系統(tǒng)就是一個半成品,不成熟的系統(tǒng)以及google的快速迭代開發(fā),導致廠家完全跟不上google的步伐,你2.3的bug還沒改完,4.0就出來了,4.0的bug還在處理,4.1出來了,最后的結(jié)果就是,手機廠家給每部手機一個系統(tǒng)版本,并且不能升級。最后苦逼的就是廣大的程序猿們,你不得不考慮從2.1到4.3的所有版本,除非你想放棄那些用低版本手機的用戶。
以上只是吐槽,下面正式開始
前段時間碰到一個問題,就是反編譯了一個程序,按照里面的方法自己做了一個一樣的出來,關鍵代碼已經(jīng)完全一樣了,但是就是有個問題,達不到他的效果,就是橫豎屏切換,activity不重新創(chuàng)建,我花了很長時間來想,這到底是哪里出了問題,最后你知道嘛,我發(fā)現(xiàn)了?android:targetSdkVersion?這個屬性居然會影響到橫豎屏切換的生命周期。
大家都知道,如果想解決橫豎屏切換時,activity不重新創(chuàng)建,需要在manifest中配置?android:configChanges="orientation|keyboardHidden"屬性,當然在api>13的時候,你需要額外添加一個參數(shù),就是?screenSize ,不添加這個,在api 13以上的手機是不會生效的。
我只是很想知道為什么別人的應用程序只設置兩個屬性,android:configChanges="orientation|keyboardHidden" 就可以在高版本的手機中起效果,而不需要額外添加screenSize 這個屬性,我花了2天時間來想這個問題,就在我準備放棄的時候,我突然再次看到他的targetSdkVersion和我的不一樣(之前我看到過一次,沒怎么在意),抱著試試看的心態(tài),我再次開始了自己的測試,奇跡發(fā)生了,就是你如果把targetSdkVersion設置為12及以下,他在高版本的手機上也會達到橫豎屏切換不創(chuàng)建activity的效果,或許是我看api不仔細,其實這點在英文api中已經(jīng)有說明,只是網(wǎng)上的相關資料太少。
最后再次總結(jié)下橫豎屏切換時activity的生命周期,網(wǎng)上相關的總結(jié)有很多,google一下,都是一樣的,其實我告訴你,他們的總結(jié)只有部分是正解的,其他的在現(xiàn)在的模擬器上是不對的,我不知道他們用的測試api是多少,不能說他們是錯誤,在他們那個年代,我相信他是正確的,因為google嘛,你懂的,一切皆有可能
首先放出我的結(jié)論
(1)設置?android:configChanges="orientation" 和不設置這個屬性,這兩個效果是一樣的,activity都是重新創(chuàng)新
(2)橫屏切豎屏,以及豎屏切回橫屏,這兩個也是一樣的(如下總結(jié)),不會出現(xiàn)網(wǎng)上說的橫屏切回豎屏時,生命周期執(zhí)行兩遍的問題
1)重新創(chuàng)建activity的生命周期
a)2.3上:onSaveInstanceState->onPause->onStop->onCreate->onStart->onRestoreInstanceState->onResume
b)4.0上(3.2我沒測試,只測試了4.0的):onPause->onSaveInstanceState->onStop->onCreate->onStart->onRestoreInstanceState->onResume
2)不重新創(chuàng)建activity,只會調(diào)用?onConfigurationChanged
(3)targetSdkVersion會影響生命周期,targetSdkVersion在12及以下的話,設置了?android:configChanges="orientation|keyboardHidden" ,在機器上都不會重新創(chuàng)建activity,只會調(diào)用?onConfigurationChanged,如果設置targetSdkVersion>12的話,只在sdkVersion<=12的機器上有效果,>12的機器上activity還是會重新創(chuàng)建(需要加上screenSize才有效果)
(4)android2.3和android4.0的生命周期不一樣,2.3是先onSaveInstanceState,后onPause,4.0是先onPause,后onSaveInstanceState(這個我表示不想吐槽了)
現(xiàn)在放出所有的測試結(jié)果(注:以下結(jié)果中的不重新創(chuàng)建activity和重新創(chuàng)建均代表結(jié)論2的內(nèi)容)
(1)設置?android:configChanges="orientation"?和不設置這個屬性,生命周期表現(xiàn)為重新創(chuàng)建activity
(2)設置?android:configChanges="orientation|keyboardHidden",在2.3上表現(xiàn)為不重新創(chuàng)建activity,4.0如下
a)android:targetSdkVersion<="12",生命周期表現(xiàn)為不重新創(chuàng)建activity
b)android:targetSdkVersion>"12",表現(xiàn)為重新創(chuàng)建activity
(3)設置?android:configChanges="orientation|keyboardHidden|screenSize",在2.3和4.0上都表現(xiàn)為不重新創(chuàng)建
?
歡迎大家交流,有問題請指正。
總結(jié)
以上是生活随笔為你收集整理的你还在问android横竖屏切换的生命周期?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 多种特效TextVie
- 下一篇: android的task任务栈