<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" tools:context="${relativePackage}.${activityClass}" > <TextView android:id="@+id/txtField1" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
当包含视图的活动被销毁时,只有那些在这个活动中被命名的视图(通过android:id属性)才能保持它们的状态。
例如,在向EditText视图中输入一些文本的同时,用户可能会改变显示方向。出现这种情况时,EditText视图中的任何文本将被保持并在活动重新创建时自动恢复。相反,如果没有使用android:id属性命名EditText视图,活动将无法保持视图中当前所含文本。
package com.example.androidtest; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; public class OrientationsActivity extends Activity { private final String TAG = "StateInfo"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_orientations); Log.d(TAG, "onCreate"); } @Override public void onStart() { Log.d(TAG, "onStart"); super.onStart(); } @Override public void onResume() { Log.d(TAG, "onResume"); super.onResume(); } @Override public void onPause() { Log.d(TAG, "onPause"); super.onPause(); } @Override public void onStop() { Log.d(TAG, "onStop"); super.onStop(); } @Override public void onDestroy() { Log.d(TAG, "onDestroy"); super.onDestroy(); } @Override public void onRestart() { Log.d(TAG, "onRestart"); super.onRestart(); } }
输出:
当设备改变方向时,活动先被销毁:
onPause
onStop
onDestroy
然后,它被重建:
onCreate
onStart
onResume
对于任意活动,应该在onPause()事件中保存任何您需要保存的状态,这一事件在每次活动改变方向时触发。