1. 程式人生 > >Activity的橫豎屏切換,之探索橫屏切換豎屏切時會執行兩次的理解

Activity的橫豎屏切換,之探索橫屏切換豎屏切時會執行兩次的理解

橫屏切換豎屏切時會執行兩次這個問題一直困擾著我,查了好多資料都無法驗證,然後我就將生命週期全部重寫,在不同的版本上執行檢視日誌。最終才發現,橫屏切換豎屏執行兩次並非所有版本都這樣,在2.3版本及以後都驗證這句話不符合,但當我嘗試到2.2時發現的確這樣,當螢幕旋轉時會執行兩次。

如果你有好奇心可以去下面地址下載android2.2的platforms

http://pan.baidu.com/s/1qXOdsBU

注意:測試需要改清單檔案,否則會報錯。

一下例子在android4.4上測試結果:

在清單檔案中配置該屬性:android:configChanges屬性

總結:

1、不設定Activity

android:configChanges切屏會重新呼叫各個生命週期切橫屏時會執行一次切豎屏時會執行兩次

2、設定Activityandroid:configChanges="orientation"切屏還是會重新呼叫各個生命週期切橫、豎屏時只會執行一次

3、設定Activityandroid:configChanges="orientation|keyboardHidden"切屏不會重新呼叫各個生命週期只會執行onConfigurationChanged方法

注意:自從Android 3.2API 13),在設定Activityandroid:configChanges="orientation|keyboardHidden"

後,還是一樣會重新呼叫各個生命週期的。因為screen size也開始跟著裝置的橫豎切換而改變。因此,阻止程式在執行時重新載入Activity,除了設定"orientation"你還必須加上"ScreenSize"

不設定android:configChanges情況下:

測試程式碼:

public classMainActivity extends Activity {

         privateString TAG="MainActivity";

         @Override

         protectedvoid onCreate(Bundle savedInstanceState) {

                  super.onCreate(savedInstanceState);

                  setContentView(R.layout.activity_main);

                  Log.i(TAG,"onCreate");

         }

         @Override

         protectedvoid onStart() {

                  super.onStart();

                  Log.i(TAG,"onStart");

         }

         @Override

         protectedvoid onRestoreInstanceState(Bundle savedInstanceState) {

                  super.onRestoreInstanceState(savedInstanceState);

                  Log.i(TAG,"onRestoreInstanceState");

         }

         @Override

         protectedvoid onResume() {

                  super.onResume();

                  Log.i(TAG,"onResume");

         }

         @Override

         protectedvoid onPause() {

                  super.onPause();

                  Log.i(TAG,"onPause");

         }

         @Override

         protectedvoid onSaveInstanceState(Bundle outState) {

                  super.onSaveInstanceState(outState);

                  Log.i(TAG,"onSaveInstanceState");

         }

         @Override

         protectedvoid onStop() {

                  super.onStop();

                  Log.i(TAG,"onStop");

         }

         @Override

         protectedvoid onDestroy() {

                  super.onDestroy();

                  Log.i(TAG,"onDestroy");

         }      

}

螢幕切換activity的生命週期執行:

豎屏切換橫屏:(結束掉當前activity,重新建立新的activity)

執行中的activity----onPause-----onStop-----onDestroy-----onCreate------onStart---------onRsume


橫屏切換豎屏

執行中的activity----onPause-----onStop-----onDestroy-----onCreate------onStart---------onRsume


注意:前三個和後三個不屬於同一個生命週期。

android2.2測試結果:

注:僅僅輸出了橫屏切換豎屏


android4.4僅僅橫屏切換豎屏:


另外,值得注意的是,生命週期的執行順序有所不同,主要表現在onSaveInstanceState和onRestoreInstanceState

相關推薦

Activity橫豎切換探索切換時會執行理解

橫屏切換豎屏切時會執行兩次這個問題一直困擾著我,查了好多資料都無法驗證,然後我就將生命週期全部重寫,在不同的版本上執行檢視日誌。最終才發現,橫屏切換豎屏執行兩次並非所有版本都這樣,在2.3版本及以後都驗證這句話不符合,但當我嘗試到2.2時發現的確這樣,當螢幕旋轉時會執行兩次

activity被回收後點選Tab無法切換fragment

1、原因:當activity在後臺並且記憶體不足時,系統會把activity給回收掉,但也會儲存部分(不是全部)資訊用於下次頁面恢復。這樣會導致下次進入頁面後佈局或資料錯亂,並且點選底部Tab無法切換fragment。 2、解決方法: (1)方法一:註釋掉sup

viewpager即能實現滑動切換又能點選切換的實現

viewpager對於我們來說並不陌生,用到的地方很多,也很方便,這裡我就簡單的處理一下滑動和點選veiwpager切換,廢話不多說,上程式碼: 佈局很簡單:不多說 <RelativeLayo

根據圖片完整路徑獲得圖片的寬和高判斷是版還是版圖片

判斷圖片是橫版還是豎版圖片,就要獲得圖片的寬和高,有兩種獲得方式 1、圖片在同一個機器(本地)可以預覽 /** * @function:根據圖片完整路徑,判斷是橫版還是豎版圖片 * @pa

AbstractRoutingDataSource動態資料來源切換AOP實現動態資料來源切換

AbstractRoutingDataSource動態資料來源切換 上週末,室友通宵達旦的敲程式碼處理他的多資料來源的問題,搞的非常的緊張,也和我聊了聊天,大概的瞭解了他的業務的需求。一般的情況下我們都是使用SSH或者SSM框架進行處理我們的資料來源的資

tap點擊一內部程序執行

tap 得到 data 程序 -s document 解釋 bsp 一次 調試過程發現,使用 $(document).on(‘tap‘, ‘.children2‘, function () { //內部程序 }) 點擊children2的時候,程序在裏面執行了兩次。百度得

struts2action方法自動執行

sys sele urn 自動 obj sel hiberna ron name 發現一個比較有意思的bug, //Action中以get開頭且返回類型不為void(如 public Object get*() )的方法會被自動執行//放入值棧時會執行一次,//若在頁面調

JVM菜鳥進階高手路六(JVM每隔一小時執行Full GC)

JVM菜鳥進階高手之路六(JVM每隔一小時執行一次Full GC) 轉載請註明原創出處,謝謝! 上次分析詳細地址在:http://www.cnblogs.com/lirenzuo/p/7531700.html 以為上次問題是rmi的問題就此結束了,但是問題並沒有結束,其實本次問

####jquery click點選一執行解決方法【遇到】【解決(先接觸繫結再繫結):$('#addImg').unbind('click').click(function () {})】

====專案例項: <%--$("body").on("click", "#toggle-button${activityDTO.id}", function (e) {--%> // 一次點選兩次觸發事件 <%--$("body").on("click", "#switc

解決監聽label時點選label內input執行的bug

   有的時候,我們需要監聽label點選事件和input點選事件,如下所示:          <label id="checkbox"  data-role="checkbox">  <input id="storepwd"  type="checkb

spring定時器定時器一執行的問題

今天在做一個專案的時候用到了Spring的定時計劃任務。這是Spring的特色功能,可以根據設定在特定的時間或間隔時間做特定的事。 下面給出一個例子: package net.csdn.blog.chaijunkukn;   import

用jquery 繫結一個按鈕click事件後第一點選後一切正常第二點選竟然執行以後越來越多

用jquery  繫結一個按鈕click事件後,第一次點選後,一切正常,第二次點選,竟然執行兩次,以後越來越多。 後來檢視文件發現  jquery click  不是 替換原有的function  而是接著新增,所以才會執行次數越來越多。 這有就可以在新增之前要先解除cli

關於Activity中onCreate()方法執行的問題

這兩天練習碰見個問題,當我要把視窗設定為橫屏時,我使用的方法是在程式碼裡呼叫:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 執行,沒問題。 於是接著各種編碼。。。 但是再次執行時發

用jquery 繫結一個按鈕click事件後第一點選後一切正常第二點選竟然執行以後越來越多

用jquery  繫結一個按鈕click事件後,第一次點選後,一切正常,第二次點選,竟然執行兩次,以後越來越多, 後來檢視文件發現  jquery click  不是 替換原有的function  而是接著新增,所以才

input內容改變後ie11中change事件執行的解決辦法

頁面檔案上傳,程式碼如下: <form id="subId" action="doc/uploadTranslate"enctype="multipart/form-data"method="p

Java Web開發中自定義過濾器被執行的原因分析及解決辦法

本文出處:http://blog.csdn.net/chaijunkun/article/details/7646338,轉載請註明。由於本人不定期會整理相關博文,會對相應內容作出完善。因此強烈建議在原始出處檢視此文。 在Java Web開發過程中,我們可以使用過濾器和Sp

配置切面出現問題執行監聽前後方法執行情況

import java.sql.Connection; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotat

頁面提交一請求action執行

問題描述:struts2框架,ajax請求下頁面提交一次請求,action中的方法會執行兩次原因:action中的方法以get開頭,所以執行兩次,原理不清楚,猜測與struts2的屬性驅動有關係(以set、get方式設定和取值)解決方法:把方法名改為以其他字串開頭就好了

Cocos2dx CCJumpTo函式執行跳躍時座標異常

最近剛接觸Cocos2dx,想寫一個點選螢幕人物跳躍的功能,完成後發現,連續點選兩次螢幕任務跳躍時動作異常,不知何解? bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { //pSprit

登入頁面在輸入了正確的使用者名稱和密碼後仍跳轉到登入頁面而不是期望的系統首頁面debug的時候發現登入頁面呼叫的action類方法被呼叫了後臺無法獲取前臺頁面傳過來的引數。

問題描述: 專案首頁面進不去,debug的時候發現,index頁面呼叫的action類方法被呼叫了兩次,後臺無法獲取前臺頁面傳過來的引數,導致登入頁面在輸入了正確的使用者名稱和密碼後仍跳轉到登入頁面而不是期望的系統首頁面。 可能原因: 在Eclipse中的專案名與專案配置檔