赞
踩
一、Activity切换的生命周期
前面Android基础知识(五):Activity的生命周期一文中,提到的关于Activity的生命周期只是单个Activity的生命周期,没有说明从一个Activity进入另一个Activity时,或者从一个Activity返回到上一个Activity时这些函数的调用顺序。
从一个Activity进入另一个Activity的函数调用顺序如下。
从上图可以看到,Activity B在被创建之前(调用onCreate之前),Activity A需要先完成onPause的回调,即前文所说的,onPause方法执行之后,新Activity的onResume方法才会执行。
因此onPause方法中虽然可以做一些数据存储或者动画停止或者资源的释放,但是不能太耗时。
从Activity B返回到上一个Activity(A)的函数回调顺序图如下。
上图考虑的是Activity A完全不可见的情况下,Activity A会回调onStop方法。
二、onNewIntent()触发机制
笔记:Android基础知识(六):Activity的启动模式中,提到了Activity的四种启动模式,在启动模式singleTask和singleTop中,由于系统会判断返回栈中是否存在实例,若存在(singleTop还要求处于栈顶)实例,那么系统会将请求发送到该实例上,因此不会调用常规的onCreate方法,而是调用onNewIntent方法。
如下所示为onNewIntent调用时机图。
当Activity(假设为A)的launchMode为singleTop且A的实例处于栈顶,或者launchMode为singleTask且A的实例已经在栈里(无论是栈顶还是栈中),再次启动Activity A时,便不会调用onCreate()去产生新的实例,而是调用onNewIntent()并重用返回栈里的A实例。
如果A在栈顶,那么方法回调的调用顺序依次为A.onPause() -> A.onNewIntent() -> A.onResume()。A的launchMode可以为singleTo或者是singleTask。
如果A不在栈顶,此时它处于A.onStop()状态,当再次启动时,调用顺序依次是A.onStop() -> A.onNewIntent() -> A.onRestart() -> A.onStart() -> A.onResume()。A的launchMode只能是singleTask。
三、onNewIntent()注意事项
参考资料:Android activity onNewIntent调用时机
Android:onNewIntent()触发机制及注意事项
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。