日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

你还在问android横竖屏切换的生命周期?

發布時間:2024/4/17 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你还在问android横竖屏切换的生命周期? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文原創,轉載請注明來自xiaoQLu?http://www.cnblogs.com/xiaoQLu/p/3324503.html

  開源幫助android獲得了飛速的發展,開源也導致了數不清的碎片問題。android的前期系統就是一個半成品,不成熟的系統以及google的快速迭代開發,導致廠家完全跟不上google的步伐,你2.3的bug還沒改完,4.0就出來了,4.0的bug還在處理,4.1出來了,最后的結果就是,手機廠家給每部手機一個系統版本,并且不能升級。最后苦逼的就是廣大的程序猿們,你不得不考慮從2.1到4.3的所有版本,除非你想放棄那些用低版本手機的用戶。

  以上只是吐槽,下面正式開始

  前段時間碰到一個問題,就是反編譯了一個程序,按照里面的方法自己做了一個一樣的出來,關鍵代碼已經完全一樣了,但是就是有個問題,達不到他的效果,就是橫豎屏切換,activity不重新創建,我花了很長時間來想,這到底是哪里出了問題,最后你知道嘛,我發現了?android:targetSdkVersion?這個屬性居然會影響到橫豎屏切換的生命周期。

  大家都知道,如果想解決橫豎屏切換時,activity不重新創建,需要在manifest中配置?android:configChanges="orientation|keyboardHidden"屬性,當然在api>13的時候,你需要額外添加一個參數,就是?screenSize ,不添加這個,在api 13以上的手機是不會生效的。

  我只是很想知道為什么別人的應用程序只設置兩個屬性,android:configChanges="orientation|keyboardHidden" 就可以在高版本的手機中起效果,而不需要額外添加screenSize 這個屬性,我花了2天時間來想這個問題,就在我準備放棄的時候,我突然再次看到他的targetSdkVersion和我的不一樣(之前我看到過一次,沒怎么在意),抱著試試看的心態,我再次開始了自己的測試,奇跡發生了,就是你如果把targetSdkVersion設置為12及以下,他在高版本的手機上也會達到橫豎屏切換不創建activity的效果,或許是我看api不仔細,其實這點在英文api中已經有說明,只是網上的相關資料太少。

  最后再次總結下橫豎屏切換時activity的生命周期,網上相關的總結有很多,google一下,都是一樣的,其實我告訴你,他們的總結只有部分是正解的,其他的在現在的模擬器上是不對的,我不知道他們用的測試api是多少,不能說他們是錯誤,在他們那個年代,我相信他是正確的,因為google嘛,你懂的,一切皆有可能

  首先放出我的結論

  (1)設置?android:configChanges="orientation" 和不設置這個屬性,這兩個效果是一樣的,activity都是重新創新

  (2)橫屏切豎屏,以及豎屏切回橫屏,這兩個也是一樣的(如下總結),不會出現網上說的橫屏切回豎屏時,生命周期執行兩遍的問題

    1)重新創建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)不重新創建activity,只會調用?onConfigurationChanged

  (3)targetSdkVersion會影響生命周期,targetSdkVersion在12及以下的話,設置了?android:configChanges="orientation|keyboardHidden" ,在機器上都不會重新創建activity,只會調用?onConfigurationChanged,如果設置targetSdkVersion>12的話,只在sdkVersion<=12的機器上有效果,>12的機器上activity還是會重新創建(需要加上screenSize才有效果)

  (4)android2.3和android4.0的生命周期不一樣,2.3是先onSaveInstanceState,后onPause,4.0是先onPause,后onSaveInstanceState(這個我表示不想吐槽了)

  現在放出所有的測試結果(注:以下結果中的不重新創建activity和重新創建均代表結論2的內容)

(1)設置?android:configChanges="orientation"?不設置這個屬性,生命周期表現為重新創建activity

(2)設置?android:configChanges="orientation|keyboardHidden",在2.3上表現為不重新創建activity,4.0如下

  a)android:targetSdkVersion<="12",生命周期表現為不重新創建activity

  b)android:targetSdkVersion>"12",表現為重新創建activity

(3)設置?android:configChanges="orientation|keyboardHidden|screenSize",在2.3和4.0上都表現為不重新創建

?

歡迎大家交流,有問題請指正。

總結

以上是生活随笔為你收集整理的你还在问android横竖屏切换的生命周期?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。