您的位置:首页 > 其它

【Activity】Activity生命周期及启动模式

2015-09-10 17:22 253 查看

Activity生命周期

先来看下经典的生命周期流程图:



从这个经典的流程图中可以看出,Activity的生命周期可以分为这样几个流程:

当启动一个Activity时,首先会执行onCreate–>onStart–>onResume。此时该Activity就处于运行状态

在启动的Activity中,你的需求有可能允许弹出一个popupwindow或者dialog,此时会调用onPause方法,暂停当前Activity的执行。

当我们在popupwindow或者dialog中执行完毕需要dismiss,此时Activity将会重新在前台工作,此时会调用onResume方法,Activity进入运行状态。

当跳转到其他的Activity时,当前Activity为不可见。此时会调用onPause–>onStop方法。

我们知道,调用onPause或者onStop方法后,当前Activity处于不可交互的状态,若系统内存不足时,则会销毁当前Activity时,再次启动时,会重新调用onCreate–>onStart–>onResume

如Activity调用onStop方法,此时Activity处于停止状态时,想要重新启动Activity,此时系统会调用onRestart–>onstart–>onResume方法。

销毁一个Activity:onStop–>onDestroy

以上是Activity的基本生命周期流程,往往有时候还需要其他的生命周期方法:如onSaveInstanceState、onWindowFocusChanged等方法。

下面通过代码来进一步体会Activity的生命周期。

[code]public class MainActivity extends Activity implements View.OnClickListener{

    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i("ActivityLifeCycle","onCreate");
        setContentView(R.layout.activity_main);
        btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(this);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("ActivityLifeCycle","onStart()");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("ActivityLifeCycle", "onResume()");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("ActivityLifeCycle", "onPause()");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("ActivityLifeCycle", "onStop()");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i("ActivityLifeCycle", "onRestart()");
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.i("ActivityLifeCycle", "onSaveInstanceState()");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("ActivityLifeCycle", "onDestroy()");
    }

    @Override
    public void onClick(View v) {
        if (v.getId()==R.id.btn){
            Intent intent = new Intent(MainActivity.this,OtherActivity.class);
            startActivity(intent);
        }
    }
}


当首次启动程序时




我们可以看到依次执行了onCreate–>onStart–>onResume,此时Activity处于运行状态。

当我们锁屏后




执行了onPause–>onSaveInstanceState–>onStop方法,此时Activity处于不可见状态。注意:onSaveInstanceState是在onPause方法之后执行。

当我们解锁后




执行了onRestart–>onStart–>onResume,此时Activity重新处于运行状态了。

Activity启动模式

Activity的启动模式有这四种方式:Standard、SingleTop、SingleTask、SingleInstance。

Standard:标准模式,若不设置任何启动模式,默认为standard模式。当为Standard模式时,一调用startActivity都会产生一个Activity的实例。

SingleTop:如果已经有一个实例在Activity的栈顶,就不创建新的实例,而是调用Activity中的newInstance()方法。如果不位于栈顶,就创建新的实例。

SingleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;

SingleInstance:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: