Android系統橫豎屏切換時候Activity的生命週期
網上看到有文章說橫屏切換成豎屏的時候會列印兩次相同的Log,百思不得其解啊,於是自己動手驗證一下。
環境:
AndroidStudio 2.1.2
minSdkVersion 15 、targetSdkVersion 23
裝置:Genymotion 4.1.1-API16
分為兩個步驟:
- 不新增android:configChanges屬性
- 新增android:configChanges=”orientation|screenSize”
原始碼
MainActivity.class
package com.example.activitydemo;
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
private String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate: ");
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart: ");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume: ");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause: ");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop: ");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy: ");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "onRestart: ");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.i(TAG, "onSaveInstanceState: ");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG, "onRestoreInstanceState: ");
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.i(TAG, "onConfigurationChanged: ");
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.activitydemo">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
1.不新增android:configChanges屬性:
-
建立Activity:
- MainActivity: onCreate:
- MainActivity: onStart:
- MainActivity: onResume:
-
旋轉至橫屏:
- MainActivity: onPause:
- MainActivity: onSaveInstanceState:
- MainActivity: onStop:
- MainActivity: onDestroy:
- MainActivity: onCreate:
- MainActivity: onStart:
- MainActivity: onRestoreInstanceState:
- MainActivity: onResume:
-
旋轉至豎屏:
- MainActivity: onPause:
- MainActivity: onSaveInstanceState:
- MainActivity: onStop:
- MainActivity: onDestroy:
- MainActivity: onCreate:
- MainActivity: onStart:
- MainActivity: onRestoreInstanceState:
- MainActivity: onResume:
-
再旋轉至橫屏:
- MainActivity: onPause:
- MainActivity: onSaveInstanceState:
- MainActivity: onStop:
- MainActivity: onDestroy:
- MainActivity: onCreate:
- MainActivity: onStart:
- MainActivity: onRestoreInstanceState:
- MainActivity: onResume:
小結:橫豎屏切換Activity的生命週期跟預想的一樣,只重啟了一次。可以理解為先銷燬豎屏的Activity,再建立橫屏的Activity。網上說的列印兩次Log的說法不知道是怎麼來的。
2.新增android:configChanges屬性:orientation|screenSize
<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
ps: 若編譯選項中的minSdkVersion和targetSdkVersion有一項大於13時,需同時新增orientation|screenSize屬性才能防止旋轉螢幕時Activity重啟
-
建立Activity:
- MainActivity: onCreate:
- MainActivity: onStart:
- MainActivity: onResume:
-
旋轉至橫屏:
- MainActivity: onConfigurationChanged:
-
旋轉至豎屏:
- MainActivity: onConfigurationChanged:
小結:可以看到,新增了android:configChanges=”orientation|screenSize”屬性的Activity在旋轉螢幕時不會重啟。
相關文章
- Activity橫豎屏切換生命週期
- 你還在問android橫豎屏切換的生命週期?Android
- Android橫豎屏切換Android
- iOS 橫豎屏切換iOS
- activity橫屏豎屏
- 多Activity切換的生命週期問題
- Android在橫豎屏切換時到底發生了什麼?Android
- android解鎖屏時Activity生命週期的變化Android
- dialog橫豎屏切換時消失的解決方法
- [Android]Activity的生命週期Android
- Android Activity生命週期Android
- 橫屏和豎屏切換介面不重新整理
- [iOS]終極橫豎屏切換解決方案iOS
- 40 橫豎屏切換略縮圖不能定位
- 直播電商平臺開發,橫豎屏切換的方法
- Activity生命週期
- Android 元件系列-----Activity生命週期Android元件
- Android Activity生命週期詳解Android
- 橫豎屏切換中的介面設計與體驗提升
- Android Activity生命週期的一點感悟Android
- 初識Android之Activity的生命週期Android
- View生命週期與Activity生命週期的關係View
- Android全面解析之Activity生命週期Android
- Android四大元件——Activity——Activity的生命週期Android元件
- Activity生命週期onDestroy
- android轉屏,切換螢幕,橫豎屏(onConfigurationChanged)會重新 OnCreate 的解決方案Android
- [貝聊科技] iOS 終極橫豎屏切換解決方案iOS
- 擼擼Android的羊毛(二)----Activity生命週期Android
- Android 之 Activity 生命週期的淺析(二)Android
- activity的生命週期(總結)
- View和Activity的生命週期View
- Android 之 Activity 生命週期淺析(一)Android
- Activity生命週期總結
- iOS橫豎屏iOS
- Android學習筆記04——Activity的生命週期Android筆記
- Activity 知識梳理(1) Activity生命週期
- 關於activity的生命週期1
- activity生命週期的onPause和onStop