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

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的生命周期。

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:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值