一、android:configChanges="orientation|keyboardHidden|screenSize"
发现不论屏幕如何转动始终加载的是layout-port中的布局文件
1、启动Activity
12-30 07:02:56.786 18822-18822/? D/MainActivity: onCreate()
12-30 07:02:56.786 18822-18822/? D/MainActivity: onStart()
12-30 07:02:56.786 18822-18822/? D/MainActivity: onResume()
12-30 07:02:56.886 18822-18822/? D/MainActivity: onWindowFocusChanged()
2、退出Activity
12-30 07:08:21.582 23712-23712/com.example.huang.activity_life_cycle D/MainActivity: onPause()
12-30 07:08:21.662 23712-23712/com.example.huang.activity_life_cycle D/MainActivity: onWindowFocusChanged()
12-30 07:08:22.062 23712-23712/com.example.huang.activity_life_cycle D/MainActivity: onDestroy()
3、切换为横屏模式
12-30 07:13:47.846 28852-28852/com.example.huang.activity_life_cycle D/MainActivity: onConfigurationChanged()
12-30 07:13:47.846 28852-28852/com.example.huang.activity_life_cycle D/MainActivity: 横屏模式
4、再次切换为竖屏模式
12-30 07:14:52.630 28852-28852/com.example.huang.activity_life_cycle D/MainActivity: onConfigurationChanged()
12-30 07:14:52.630 28852-28852/com.example.huang.activity_life_cycle D/MainActivity: 竖屏模式
二、android:screenOrientation="sensor"
1、启动Activity
12-30 07:21:53.822 4453-4453/com.example.huang.activity_life_cycle D/MainActivity: onCreate()
12-30 07:21:53.826 4453-4453/com.example.huang.activity_life_cycle D/MainActivity: onStart()
12-30 07:21:53.826 4453-4453/com.example.huang.activity_life_cycle D/MainActivity: onResume()
12-30 07:21:54.042 4453-4453/com.example.huang.activity_life_cycle D/MainActivity: onWindowFocusChanged()
2、 切换为横屏模式
12-30 07:23:30.046 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onPause()
12-30 07:23:30.046 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onSaveInstanceState()
12-30 07:23:30.046 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onRetainNonConfigurationInstance()
12-30 07:23:30.046 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onDestroy()
12-30 07:23:30.058 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onCreate()
12-30 07:23:30.062 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onStart()
12-30 07:23:30.062 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onRestoreInstanceState()
12-30 07:23:30.062 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onResume()
12-30 07:23:30.110 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onWindowFocusChanged()
三、代码
1、AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.huang.activity_life_cycle">
<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"
android:label="@string/app_name"
android:screenOrientation="sensor"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
2、layout中的main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="layout"
android:textColor="@color/colorAccent"
android:textSize="24sp" />
</RelativeLayout>
3、layout-port中的main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="竖屏"
android:textColor="@color/colorAccent"
android:textSize="24sp" />
</RelativeLayout>
4、layout-land中的main.xml
5、ParcelableData.java<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="横屏" android:textColor="@color/colorAccent" android:textSize="24sp" /> </RelativeLayout>
package com.example.huang.activity_life_cycle; import android.os.Parcel; import android.os.Parcelable; import java.util.ArrayList; /** * Created by huang on 2016/12/30. */ public class ParcelableData implements Parcelable { private String name; private int age; private ArrayList<String> list; public ParcelableData() { name = "guest"; age = 20; } public ParcelableData(Parcel in) { //顺序要和writeToParcel写的顺序一样 name = in.readString(); age = in.readInt(); list = in.readArrayList(ArrayList.class.getClassLoader()); } public ArrayList<String> getList() { return list; } public void setList(ArrayList<String> list) { this.list = list; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int describeContents() { // TODO Auto-generated method stub return 0; } @Override public void writeToParcel(Parcel dest, int flags) { // TODO Auto-generated method stub dest.writeString(name); dest.writeInt(age); dest.writeList(list); } public static final Parcelable.Creator<ParcelableData> CREATOR = new Parcelable.Creator<ParcelableData>() { public ParcelableData createFromParcel(Parcel in) { return new ParcelableData(in); } public ParcelableData[] newArray(int size) { return new ParcelableData[size]; } }; }
6、MainActivity.java
package com.example.huang.activity_life_cycle; import android.app.Activity; import android.content.res.Configuration; import android.os.Bundle; import android.support.annotation.Nullable; import android.util.Log; import java.util.ArrayList; public class MainActivity extends Activity { private static final String TAG = "MainActivity"; private ArrayList<String> list = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate()"); super.onCreate(savedInstanceState); setContentView(R.layout.main); list.add("aaaa"); list.add("bbbb"); list.add("cccc"); list.add("dddd"); list.add("eeeee"); } @Override protected void onStart() { Log.d(TAG, "onStart()"); super.onStart(); } @Override protected void onResume() { Log.d(TAG, "onResume()"); super.onResume(); } @Override protected void onRestart() { Log.d(TAG, "onRestart()"); super.onRestart(); } @Override protected void onPause() { Log.d(TAG, "onPause()"); super.onPause(); } @Override protected void onDestroy() { Log.d(TAG, "onDestroy()"); super.onDestroy(); } @Override public void onConfigurationChanged(Configuration newConfig) { Log.d(TAG, "onConfigurationChanged()"); super.onConfigurationChanged(newConfig); if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Log.d(TAG, "横屏模式"); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { Log.d(TAG, "竖屏模式"); } } @Override public void onWindowFocusChanged(boolean hasFocus) { Log.d(TAG, "onWindowFocusChanged()"); super.onWindowFocusChanged(hasFocus); } @Override protected void onSaveInstanceState(Bundle outState) { Log.d(TAG, "onSaveInstanceState()"); super.onSaveInstanceState(outState); Bundle bundle = new Bundle(); bundle.putString("MyString", "test bundle"); ParcelableData parcelableData = new ParcelableData(); parcelableData.setName("hhhh"); parcelableData.setAge(28); parcelableData.setList(list); bundle.putParcelable("MyData", parcelableData); outState.putBundle("huangyi", bundle); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { Log.d(TAG, "onRestoreInstanceState()"); super.onRestoreInstanceState(savedInstanceState); Bundle bundle = savedInstanceState.getBundle("huangyi"); ParcelableData parcelableData = bundle.getParcelable("MyData"); String testBundleString = bundle.getString("MyString"); Log.d(TAG, "testBundleString===>" + testBundleString); Log.d(TAG, "name=" + parcelableData.getName()); Log.d(TAG, "age=" + parcelableData.getAge()); ArrayList<String> parceList = parcelableData.getList(); for (int i = 0; i < parceList.size(); i++) { Log.d(TAG, "====>" + parceList.get(i)); } } @Override public Object onRetainNonConfigurationInstance() { Log.d(TAG, "onRetainNonConfigurationInstance()"); return super.onRetainNonConfigurationInstance(); } @Nullable @Override public Object getLastNonConfigurationInstance() { Log.d(TAG, "getLastNonConfigurationInstance()"); return super.getLastNonConfigurationInstance(); } }
代码地址:http://download.csdn.net/detail/yihuangol/9725926