activity的生命周期


1).按back退出activity

此时会走onPause()->onStop()->onDestroy()方法:




2).在一个Activity中启动另一个Activity

从MainActivity中启动SecondActivity我们可以很清楚的看到MainActivity中的onPause方法执行完了以后然后新的SecondActivity的onCreate、onStart、onResume方法就会依次执行将SecondActivity显示出来,最后MainActivity的onStop方法才会被调用。这同时也验证了之前提到的,google并不建议在onPause方法里进行一些耗时操作。



与生命周期相关的一些重要方法

1)onSaveInstanceState与onRestoreInstanceState方法

前面提在介绍onCreate的时候提到过onCreate方法中带有一个Bundle参数,我们在正常启动Activity的时候打印这个参数会发先它是为null的。我们看google文档可以发现,这个参数只有当Activity重新初始化的时候才不会为null。那么什么叫重新初始化呢?举一个简单的例子,比方说手机横竖屏切换的时候如果我们没有在manifest文件的configchange属性里指定orientation|screenSize(在android4.0以上必须同时指定这两个属性,如果只写orientation不生效)就会在onPause之后调用到onSaveInstanceState(Bundle)方法,此时我们就可以往Bundle里存储一些数据,随后系统会杀死Activity然后再重启它,此时我们发现onCreate方法中的Bundle参数不为空:

@Overrideprotected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  Log.i(TAG, "MainActivity onCrate");
  if (savedInstanceState != null) {
    Log.i(TAG, "onCreate:" + savedInstanceState.getString(TAG));
  } else {
    Log.i(TAG, "onCreate:" + savedInstanceState);
  }
}

@Overrideprotected void onSaveInstanceState(Bundle outState) {
  super.onSaveInstanceState(outState);
  Log.i(TAG, "onSaveInstanceState");
  outState.putString(TAG, "outState");
}

3).onNewIntent方法

当我们在manifest文件里对Activity的launchmode进行设置为singleTop、singleTask、singleInstance的时候都会有可能调用到此方法。如图所示:



4).通过Intent中setFlags来指定启动模式
1.Intent.FLAG_ACTIVITY_NEW_TASK

使用一个新的任务栈来启动一个Activity,该flag通常用于在Service中启动Activity的场景,因为Service中并不存在有Activity任务栈所以通常通过这种方式来新启动一个Activity任务栈并创建新的Activity实例。

2.Intent.FLAG_ACTIVITY_SINGLE_TOP

与在manifest文件里的launchmode指定"singleTop"作用一样

3.Intent.FLAG_ACTIVITY_CLEAR_TOP

与在manifest文件里的launchmode指定"singleTask"作用一样

4.Intent.FLAG_ACTIVITY_NO_HISTORY

设置了该Flags的Activity在启动其他Activity后该Activity就消失了,不会保留在Activity栈中,此Activity可以作为一个中转Activity来负责启动其他的Activity。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值