最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android實現(xiàn)在橫豎屏切換時頁面信息不被重置的示例分享

 更新時間:2014年02月20日 11:52:01   作者:  
這篇文章主要介紹了android實現(xiàn)在橫豎屏切換時頁面信息不被重置的示例,需要的朋友可以參考下

當(dāng)屏幕轉(zhuǎn)動切換的時候 Android 機制是:
銷毀當(dāng)前屏幕的 Activity ,然后重新開啟一個新的適應(yīng)屏幕改變的 Activity 。
那么,我們該如何在屏幕切換的時候頁面信息不被重置呢?

解決實現(xiàn):
1.在 AnroidMainifest.xml 的 activity 元素中加入:

復(fù)制代碼 代碼如下:

android:configChanges="orientation|keyboardHidden"


復(fù)制代碼 代碼如下:

android:configChanges="orientation|keyboard|keyboardHidden"

表示在改變屏幕方向、彈出軟件盤和隱藏軟鍵盤時,不再去執(zhí)行 onCreate() 方法,
而是直接執(zhí)行 onConfigurationChanged() 。
如果不申明此段代碼,按照Activity的生命周期,都會去執(zhí)行一次 onCreate() 方法,
而 onCreate() 方法通常會在顯示之前做一些初始化工作。

所以如果改變屏幕方向這樣的操作都去執(zhí)行 onCreate() 方法,就有可能造成重復(fù)的初始化,
降低程序效率是必然的了,而且更有可能因為重復(fù)的初始化而導(dǎo)致數(shù)據(jù)的丟失。
這是需要避免的!

2.權(quán)限聲明:

復(fù)制代碼 代碼如下:

<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"></uses-permission>

API 中說該權(quán)限允許我們改變配置信息,但是我們在改變屏幕方向的程序中卻并沒有用到該權(quán)限,是不是相互沖突了呢?
這里我們可以這樣認為,當(dāng)我們聲明該權(quán)限的的時候,
系統(tǒng)允許我們通過重寫 activity 中的 onConfigurationChanged 方法來捕獲和修改某些配置信息。

3.在 Java 源代碼文件中重寫 Activity 中的 onConfigurationChanged 方法:

復(fù)制代碼 代碼如下:

import android.content.res.Configuration;

// 框架回調(diào)函數(shù) onConfigurationChanged 出自 android.content.res.Configuration 包。
// 參數(shù) newConfig - 新設(shè)備的配備。
// 當(dāng)設(shè)備配置信息有改動(比如屏幕方向的改變,實體鍵盤的推開或合上等)時,
// 并且如果此時有 Activity 正在運行,系統(tǒng)會調(diào)用這個函數(shù)。
// 注意:onConfigurationChanged 只會響應(yīng)應(yīng)用程序在 AnroidMainifest.xml 中
//    通過 android:configChanges="配置類型" 指定的配置類型的改動;
//    而對于其他配置的更改,則系統(tǒng)會先銷毀當(dāng)前屏幕的 Activity ,
//    然后重新開啟一個新的適應(yīng)屏幕改變的 Activity 實例。
public void
onConfigurationChanged( Configuration newConfig )
{
    // 一定要先調(diào)用父類的同名函數(shù),讓框架默認函數(shù)先處理
    // 下面這句一定不能省去,否則將引發(fā):android.app.SuperNotCalledException 異常。
    super.onConfigurationChanged( newConfig );

    // 檢測屏幕的方向:縱向或橫向
    if ( this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE )
    {
        // 當(dāng)前為橫屏, 在此處添加額外的處理代碼
    }
    else if ( this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT )
    {
        //當(dāng)前為豎屏, 在此處添加額外的處理代碼
    }

    //檢測實體鍵盤的狀態(tài):推出或者合上   
    if ( newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO )
    {
        // 實體鍵盤處于推出狀態(tài),在此處添加額外的處理代碼
    }
    else if ( newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES )
    {
        // 實體鍵盤處于合上狀態(tài),在此處添加額外的處理代碼
    }
}

一、新建一個 Activity ,并把各個生命周期打印出來:
第一步:
運行 Activity ,得到如下信息:

復(fù)制代碼 代碼如下:

onCreate
onStart
onResume

第二步:
按 crtl + f12 切換成橫屏?xí)r:

復(fù)制代碼 代碼如下:

onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume

第三步:
再按 crtl + f12 切換成豎屏?xí)r,發(fā)現(xiàn)打印了兩次相同的信息:

復(fù)制代碼 代碼如下:

onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume

第四步:
修改 AndroidManifest.xml 文件中的 Activity 元素,
添加 android:configChanges="orientation" ,
按 crtl + f12 切換成橫屏?xí)r:(與上面無修改時相同)

復(fù)制代碼 代碼如下:

onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume

第五步:
再按 crtl + f12 切換成豎屏?xí)r,
發(fā)現(xiàn)不會再打印相同信息,
但多打印了一行 onConfigChanged :

復(fù)制代碼 代碼如下:

onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
onConfigurationChanged

第六步:
修改 AndroidManifest.xml 文件中的 Activity 元素,

復(fù)制代碼 代碼如下:

android:configChanges="orientation"

改成
復(fù)制代碼 代碼如下:

android:configChanges="orientation|keyboardHidden"

按 crtl + f12 切換成橫屏?xí)r,
就只打印 onConfigChanged :

復(fù)制代碼 代碼如下:

onConfigurationChanged

第七步:
按 crtl + f12 切換成豎屏?xí)r:

復(fù)制代碼 代碼如下:

onConfigurationChanged
onConfigurationChanged

二、總結(jié):
1.不設(shè)置 AndroidManifest.xml 文件中的 Activity 元素的 android:configChanges 時,
切屏?xí)匦抡{(diào)用各個生命周期,切橫屏?xí)r會執(zhí)行一次,切豎屏?xí)r會執(zhí)行兩次;

2.設(shè)置了 AndroidManifest.xml 文件中的 Activity 元素的
android:configChanges="orientation"時,
切屏還是會重新調(diào)用各個生命周期,切橫、豎屏?xí)r只會執(zhí)行一次;

3.設(shè)置了 AndroidManifest.xml 文件中的 Activity 元素的
android:configChanges="orientation|keyboardHidden"時,
切屏不會重新調(diào)用各個生命周期,只會執(zhí)行 onConfigurationChanged 方法!

三、補充一點:
1.當(dāng)前 Activity 產(chǎn)生事件彈出 Toast 和 AlertDialog 的時候 Activity 的生命周期不會有改變!

2.Activity 運行時按下 home 鍵(跟被完全覆蓋是一樣的):

復(fù)制代碼 代碼如下:

onSaveInstanceState --> onPause --> onStop
onRestart --> onStart --> onResume

3.Activity 未被完全覆蓋只是失去焦點:

復(fù)制代碼 代碼如下:

onPause --> onResume

相關(guān)文章

  • Android Studio項目適配AndroidX(Android 9.0)的方法步驟

    Android Studio項目適配AndroidX(Android 9.0)的方法步驟

    這篇文章主要介紹了Android Studio項目適配AndroidX(Android 9.0)的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Android獲取短信驗證碼的實現(xiàn)方法

    Android獲取短信驗證碼的實現(xiàn)方法

    為了保護用戶信息的安全性,開始使用通過服務(wù)器向用戶發(fā)送驗證碼的方式,接下來通過本文給大家介紹android獲取短信驗證碼的實現(xiàn)方法,非常不錯,感興趣的朋友一起看看吧
    2016-09-09
  • Android結(jié)合kotlin使用coroutine的方法實例

    Android結(jié)合kotlin使用coroutine的方法實例

    這篇文章主要給大家介紹了關(guān)于Android結(jié)合kotlin使用coroutine的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Android Compose實現(xiàn)聯(lián)系人列表流程

    Android Compose實現(xiàn)聯(lián)系人列表流程

    聲明式UI,更簡單的自定義,實時帶交互的預(yù)覽功能Compose并不是類似于Recyclerview的高級控件,而是直接拋棄了View,ViewGroup那套東西,從上到下魯了一套全新的框架,直白點說就是它的渲染機制,布局機制,觸摸算法,以及UI具體寫法全都是新的
    2023-03-03
  • 九宮圖比較常用的多控件布局(GridView)使用介紹

    九宮圖比較常用的多控件布局(GridView)使用介紹

    GridView跟ListView都是比較常用的多控件布局,而GridView更是實現(xiàn)九宮圖的首選,下面與大家分享下GridView用法,感興趣的朋友可以參考下哈
    2013-06-06
  • Android?Notification使用教程詳解

    Android?Notification使用教程詳解

    這篇文章主要介紹了Android?Notification使用,通知的使用的內(nèi)容還是比較多的,此篇文章將會盡可能詳細的介紹Notification的內(nèi)容,需要的朋友可以參考下
    2022-07-07
  • android電話模擬器(示例代碼)

    android電話模擬器(示例代碼)

    本篇文章我將為大家介紹一下android電話模擬器(示例代碼),需要的朋友可以過來參考下,希望對大家有所幫助
    2013-11-11
  • Android中使用Service實現(xiàn)后臺發(fā)送郵件功能實例

    Android中使用Service實現(xiàn)后臺發(fā)送郵件功能實例

    這篇文章主要介紹了Android中使用Service實現(xiàn)后臺發(fā)送郵件功能的方法,結(jié)合實例形式分析了Service實現(xiàn)郵件的發(fā)送、接收及權(quán)限控制相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • Android Studio配置國內(nèi)鏡像源(利用hosts)

    Android Studio配置國內(nèi)鏡像源(利用hosts)

    這篇文章主要介紹了Android Studio配置國內(nèi)鏡像源(利用hosts),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Android圖片壓縮幾種方式總結(jié)

    Android圖片壓縮幾種方式總結(jié)

    這篇文章主要介紹了Android圖片壓縮幾種方式總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評論

新邵县| 丰台区| 高安市| 习水县| 裕民县| 合山市| 靖西县| 平顶山市| 沾益县| 潼南县| 阳新县| 富裕县| 肃宁县| 德江县| 安义县| 临泉县| 城市| 谢通门县| 云南省| 乌鲁木齐市| 噶尔县| 义乌市| 祁连县| 临城县| 临沭县| 新竹县| 砀山县| 日喀则市| 闽清县| 中江县| 黑河市| 旺苍县| 定襄县| 南丰县| 易门县| 苏尼特右旗| 宜丰县| 桂林市| 正安县| 中宁县| 永和县|