請看官網的說明
http://developer.android.com/reference/android/app/Activity.html
簡單的程式測式碼如下:
public class TestRotate extends Activity {
public void onCreate(Bundle savedInstanceState) {
Log.d("TestRotate","create");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void onStart(){
Log.d("TestRotate","onStart");
super.onStart();
}
public void onResume(){
Log.d("TestRotate","onResume");
super.onResume();
}
public void onRestart(){
Log.d("TestRotate","onRestart");
super.onRestart();
}
public void onPause(){
Log.d("TestRotate","onPause");
super.onPause();
}
public void onStop(){
Log.d("TestRotate","onStop");
super.onStop();
}
public void onDestroy(){
Log.d("TestRotate","onDestroy");
super.onDestroy();
}
}
來看看一個Activity在硬體按鈕操作下的流程
程式第一次執行:
onCreate
onStart
onResume
按下home key:
onPause
onStop
再次程式執行:
onRestart
onStart
onResume
按下return Key:
onPause
onStop
onDestroy
接下來看看啟動Auto-rotate screen時,旋轉了畫面的流程:
onPause
onStop
onDestroy
onCreate
onStart
onResume
請注意,正常情況下如果旋轉畫面,其實是Destroy這個Activity後,再重啟一個Activity。換言之,有可能會讓原本的資料流失,如果要避免這個現象,可以在AndroidManifest.xml中,修改activity的tag如下:
<activity android:name=".Test"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
加上 android:configChanges="orientation",則程式不會重新經歷onPause到onResume的動作。而後面的keyboardHidden則是當使用者開啟手機的實體鍵盤時,不會重新經歷onPause到onResume的動作。
沒有留言:
張貼留言