Activity的生命週期

    網上看到過很多關於寫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的作用和用法,後面我還會再繼續更新。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章