Activity生命周期与onNewIntent

Activity生命周期与onNewIntent


standard模式下Activity的生命周期

Activity第一次启动时:onCreate -> onStart -> onResume
Activity再次启动时:onPause(原来的实例) -> onCreate(新的实例) -> onStart(新的实例)   -> onResume(新的实例) -> onStop(原来的实例)
所以,标准模式下,activity被多次启动,不会回调onNewIntent方法。

standard模式下Activity的生命周期

Activity第一次启动时:onCreate -> onStart -> onResume
Activity再次启动时:onPause -> onNewInent -> onResume
Activity第三次启动时:onPause -> onNewInent -> onResume
所以,非标准模式下,activity第一次被启动,会正常回调生命周期方法,不会回调onNewIntent方法。多次启动该activity后,均会调用 onNewInent方法。
注意:当调用到onNewIntent(intent)时,该参数的intent是最新的intent,可在onNewIntent中使用setIntent(intent),这样后续使用getIntent()时将获得最新的intent.否则,后续getIntent()得到的是旧的intent。
A画面singleTask模式下:
画面如下跳转:
A-B-A
A的生命周期如下,开发者模式中,保留活动:
1. A启动:onCreate: null == savedInstanceState -> onStart -> onResume
2. 跳转到B:onStop
3. 跳转到A:onNewIntent -> onRestart -> onStart -> onResume
A的生命周期如下,开发者模式中,不保留活动:
1. A启动:onCreate: null == savedInstanceState -> onStart -> onResume
2. 跳转到B:onStop -> onDestroy
3. 跳转到A:onCreate: null == savedInstanceState -> onStart -> onResume
也就是说,不会走onNewIntent

退出账号重新登录的实现方式

主画面设置成singleTask模式,那么在退出登录后,重新statActivity主画面,并且intent传入一个标志位:
1.主画面未被异常关闭时,此时会走onNewIntent()方法,并且主画面之上的画面会被推出栈,在该方法中根据intent传入的标志位,启动重新登录画面,关闭主画面;
2.主画面被异常关闭时,此时不会走onNewIntent()方法,并且主画面之上的画面会被推出栈,在onCreate方法中根据intent传入的标志位,启动重新登录画面,关闭主画面。
注意:
activity异常退出的时候,比如屏幕横竖切换、内存不足低优先级的activity被杀死,ondestroy仍然会被调用,除非直接退出整个进程System.exit(0)不会调用ondestroy。
那么在oncreate里把activity对象放到一个栈里,然后在ondestroy中把这个activity移除栈,是没有问题的,不会发生内存泄漏。
如果有不妥当的地方,请留言共同探讨共同进步

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值