Activity 在横竖屏切换情况下的生命周期变化
title: Activity 在橫豎屏切換情況下的生命周期變化
date: 2018-04-26 23:05:57
tags: [Activity]
categories: [Mobile,Android]
---
概述
Activity 在橫豎屏切換的時(shí)候,生命周期是不一樣的,本地通過打印 log 的方式,看下區(qū)別.測(cè)試的機(jī)器是 Android6.0 .
不做任何配置的情況下
第一次啟動(dòng)
D/LifeCircleActivity: onCreate() called with: savedInstanceState = [null]Activity對(duì)象的地址:cn.steve.activitylifecycle.LifeCircleActivity@de950fc D/LifeCircleActivity: onStart() called D/LifeCircleActivity: onResume() called第一次切換成橫屏
D/LifeCircleActivity: onPause() called D/LifeCircleActivity: onSaveInstanceState() called with: outState = [Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@80a47f5, 2131296581=android.view.AbsSavedState$1@80a47f5, 2131296815=android.view.AbsSavedState$1@80a47f5}}], key=x}]] D/LifeCircleActivity: onStop() called D/LifeCircleActivity: onDestroy() called D/LifeCircleActivity: onCreate() called with: savedInstanceState = [Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@80a47f5, 2131296581=android.view.AbsSavedState$1@80a47f5, 2131296815=android.view.AbsSavedState$1@80a47f5}}], key=x}]]Activity對(duì)象的地址:cn.steve.activitylifecycle.LifeCircleActivity@266fbfb D/LifeCircleActivity: onStart() called D/LifeCircleActivity: onRestoreInstanceState() called with: savedInstanceState = [Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@80a47f5, 2131296581=android.view.AbsSavedState$1@80a47f5, 2131296815=android.view.AbsSavedState$1@80a47f5}}], key=x}]] D/LifeCircleActivity: onResume() called再切換成豎屏
D/LifeCircleActivity: onPause() called D/LifeCircleActivity: onSaveInstanceState() called with: outState = [Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@80a47f5, 2131296581=android.view.AbsSavedState$1@80a47f5, 2131296815=android.view.AbsSavedState$1@80a47f5}}], key=x}]] D/LifeCircleActivity: onStop() called D/LifeCircleActivity: onDestroy() called D/LifeCircleActivity: onCreate() called with: savedInstanceState = [Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@80a47f5, 2131296581=android.view.AbsSavedState$1@80a47f5, 2131296815=android.view.AbsSavedState$1@80a47f5}}], key=x}]]Activity對(duì)象的地址:cn.steve.activitylifecycle.LifeCircleActivity@7e6e82e D/LifeCircleActivity: onStart() called D/LifeCircleActivity: onRestoreInstanceState() called with: savedInstanceState = [Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@80a47f5, 2131296581=android.view.AbsSavedState$1@80a47f5, 2131296815=android.view.AbsSavedState$1@80a47f5}}], key=x}]] D/LifeCircleActivity: onResume() called小結(jié)
默認(rèn)情況下,每次旋轉(zhuǎn)屏幕都會(huì)銷毀當(dāng)前的Activity對(duì)象,同時(shí)調(diào)用 onSaveInstanceState 方法,保存當(dāng)前的界面狀態(tài);之后重新創(chuàng)建 Activity對(duì)象, onCreate 參數(shù)不為空,回調(diào) onRestoreInstanceState 方法進(jìn)行恢復(fù)。
配置 configChanges="orientation"
第一次啟動(dòng)
D/LifeCircleActivity: onCreate() called with: savedInstanceState = [null]Activity對(duì)象的地址:cn.steve.activitylifecycle.LifeCircleActivity@de950fc D/LifeCircleActivity: onStart() called D/LifeCircleActivity: onResume() called第一次切換成橫屏
D/LifeCircleActivity: onPause() called D/LifeCircleActivity: onSaveInstanceState() called with: outState = [Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@80a47f5, 2131296581=android.view.AbsSavedState$1@80a47f5, 2131296815=android.view.AbsSavedState$1@80a47f5}}], key=x}]] D/LifeCircleActivity: onStop() called D/LifeCircleActivity: onDestroy() called D/LifeCircleActivity: onCreate() called with: savedInstanceState = [Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@80a47f5, 2131296581=android.view.AbsSavedState$1@80a47f5, 2131296815=android.view.AbsSavedState$1@80a47f5}}], key=x}]]Activity對(duì)象的地址:cn.steve.activitylifecycle.LifeCircleActivity@266fbfb D/LifeCircleActivity: onStart() called D/LifeCircleActivity: onRestoreInstanceState() called with: savedInstanceState = [Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@80a47f5, 2131296581=android.view.AbsSavedState$1@80a47f5, 2131296815=android.view.AbsSavedState$1@80a47f5}}], key=x}]] D/LifeCircleActivity: onResume() called再切換成豎屏
D/LifeCircleActivity: onPause() called D/LifeCircleActivity: onSaveInstanceState() called with: outState = [Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@80a47f5, 2131296581=android.view.AbsSavedState$1@80a47f5, 2131296815=android.view.AbsSavedState$1@80a47f5}}], key=x}]] D/LifeCircleActivity: onStop() called D/LifeCircleActivity: onDestroy() called D/LifeCircleActivity: onCreate() called with: savedInstanceState = [Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@80a47f5, 2131296581=android.view.AbsSavedState$1@80a47f5, 2131296815=android.view.AbsSavedState$1@80a47f5}}], key=x}]]Activity對(duì)象的地址:cn.steve.activitylifecycle.LifeCircleActivity@7e6e82e D/LifeCircleActivity: onStart() called D/LifeCircleActivity: onRestoreInstanceState() called with: savedInstanceState = [Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@80a47f5, 2131296581=android.view.AbsSavedState$1@80a47f5, 2131296815=android.view.AbsSavedState$1@80a47f5}}], key=x}]] D/LifeCircleActivity: onResume() called小結(jié)
配置 orientation 的情況下,和默認(rèn)情況一致。
配置 configChanges="orientation|screenSize"
根據(jù)官方的介紹,這個(gè)兩個(gè)值,在api大于13 之后,應(yīng)該一起使用
第一次啟動(dòng)
D/LifeCircleActivity: onCreate() called with: savedInstanceState = [null]Activity對(duì)象的地址:cn.steve.activitylifecycle.LifeCircleActivity@de950fc D/LifeCircleActivity: onStart() called D/LifeCircleActivity: onResume() called第一次切換成橫屏
D/LifeCircleActivity: onConfigurationChanged() called with: newConfig = [{1.0 ?mcc?mnc zh_CN ldltr sw360dp w640dp h336dp 320dpi nrml long land finger -keyb/v/h -nav/h s.11 themeChanged=0 themeChangedFlags=0}]再切換成豎屏
D/LifeCircleActivity: onConfigurationChanged() called with: newConfig = [{1.0 ?mcc?mnc zh_CN ldltr sw360dp w360dp h616dp 320dpi nrml long port finger -keyb/v/h -nav/h s.12 themeChanged=0 themeChangedFlags=0}]小結(jié)
當(dāng)配置了 screenSize 。則不會(huì)再銷毀重建了,而是回調(diào) onConfigurationChanged 方法。
總結(jié)
在不做配置默認(rèn)的情況下,Activity 是被銷毀,然后重新啟動(dòng)的.但是在 manifest 中進(jìn)行相應(yīng)的配置之后,就表示 Activity 自行處理配置的更改,將阻止 Activity 的銷毀重新啟動(dòng),而是保持運(yùn)行狀態(tài),并且回調(diào) onConfigurationChanged 方法.官方的建議是萬不得已的情況下才能使用.
參考
- AndroidDeveloper
- 處理運(yùn)行時(shí)變更
轉(zhuǎn)載于:https://www.cnblogs.com/jnienv/p/10575533.html
總結(jié)
以上是生活随笔為你收集整理的Activity 在横竖屏切换情况下的生命周期变化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Element UI的Table用法
- 下一篇: Leetcode 978. 最长湍流子数