網上看到過很多關於寫activity生命週期的文章,畢竟那是別人總結的,不利於記憶,雖然這是很基礎的知識點,但是真正掌握了,對開發還是有諸多好處的,事半功倍的效果,
public class MainActivity extends Activity implements OnClickListener {
private Button but;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
but = (Button) findViewById(R.id.but);
System.out.println("*****>>>>>onCreate");
but.setOnClickListener(this);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
System.out.println("******>>>>>>onSaveInstanceState");
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
System.out.println("******>>>>>>onRestoreInstanceState");
super.onRestoreInstanceState(savedInstanceState);
}
@Override
protected void onStart() {
System.out.println("*****>>>>>onStart");
super.onStart();
}
@Override
protected void onResume() {
System.out.println("*****>>>>>onResume");
super.onResume();
}
@Override
protected void onPause() {
System.out.println("*****>>>>>onPause");
super.onPause();
}
@Override
protected void onRestart() {
System.out.println("*****>>>>>onRestart");
super.onRestart();
}
@Override
protected void onStop() {
System.out.println("*****>>>>>onStop");
super.onStop();
}
@Override
protected void onDestroy() {
System.out.println("*****>>>>>onDestroy");
super.onDestroy();
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.but:
Intent main = new Intent(MainActivity.this, OneActivity.class);
MainActivity.this.startActivity(main);
break;
default:
break;
}
}
}
以上也是很簡單的代碼,就是複寫了activity的一些重要的方法,然後通過打印的方式進行驗證自己的猜想,
activity生命週期,正常的流程:onCreate->onStart->onResume->onSaveInstanceState->onPause->onStop->onDestroy
程序每次運行完onResume之後就進行運行狀態,如果此時按下返回鍵,執行路線onSaveInstanceState->onPause->onStop- >onDestroy
如果按下home鍵 執行路線onSaveInstanceState->onPause->onStop此時不會執行onDestroy方法,如果內存吃緊的情況下才會執行destroy
原來一直很糾結與何時執行onPause何時執行onStop,,,執行onPause方法的時候說是:另一個 activity即將要執行,要覆蓋這個activity,執行onStop:這個activity不可見,,,如果把一個activity程序設置成透明,也是不可見的狀態
舉例子:從A跳轉到B,,,A先執行onPause方法,當B完全可見的時候,也就是說A完全隱藏的時候,纔會執行onStop,當系統內存不足的時候嗎,系統會自動回收在棧底的activity,
還有個知識點就是當手機橫豎屏進行切換的時候的生命週期的轉化:有一些應用時把屏幕寫死的,要麼就是橫屏,要麼就是豎屏,因爲橫豎屏切換的時候會帶來一些新的問題,無意間給項目增加很大的難度,
不設置Android:configChanges的時,切屏會從新調用各個生命週期,切橫屏的時候會執行一次,切豎屏的時候會執行兩次,
設置Android:configChanges="orientation"時,切屏還是會重新調用各個生命週期,切橫豎屏時只會執行一次,
設置activity:configChanges="orientation|keybordHidden"時,切屏不會重新調用各個生命週期,只會執行onConfigurationChanged方法
今天先寫這麼多,關於生命週期的知識還有很多延伸,比如說,狀態的保存,onSaveInstanceState和onRestoreInstanceState的作用和用法,後面我還會再繼續更新。