Activity 生命周期之跳转 Activity

来源:互联网 发布:美白补水面膜 知乎 编辑:程序博客网 时间:2024/05/16 17:03



  最近一段时间,在项目之中遇到一个问题,就是下载模块,当有下载成功的MV时,要在内部存储数据中,下载数+1,然后对应地方在Activity的Onstart()方法中,从数据库中取出来数字显示更新的未读下载数,但是当用户处于下载管理页面时,当用户下载成功,退出时候应该将未读数在OnDestory()方法中清零,

结果问题就来了,返回上层activity时,OnStart()方法取出来的数字发现并没有清零,我明明在OnDestory()方法清零了呀,这是肿么回事儿,打断点跑的方法显示,Activity的Onstart()方法在下载管理页面的OnDestory()方法之后执行了,这个问题本来很简单,就是一个Activity的生命周期的问题,而众多教程中,却没有告诉我们两个Activity做跳转时,他们两个的生命周期,交叉到一起是怎么跑的。下面,给大家讲解一下


首先,我设置一个ActivityA,然后写一个ActivityB,ActivityA中有个button。点击让ActivityA跳转Activity,在他们生命周期中,打印出来生命周期的方法名。大家请看结果


02-13 10:49:49.345: E/ActivityA(15391): onCreate02-13 10:49:49.345: E/ActivityA(15391): onStrat02-13 10:49:49.345: E/ActivityA(15391): onResume02-13 10:49:51.868: E/ActivityA(15391): onPause02-13 10:49:51.918: E/ActivityB(15391): oncreate02-13 10:49:51.918: E/ActivityB(15391): onStrat02-13 10:49:51.918: E/ActivityB(15391): onResume02-13 10:49:52.268: E/ActivityA(15391): onStop

这说明,A中的OnStop方法,是在B完全创建完毕中才调用的。接下来,我们按下屏幕的返回键,看看有什么结果


02-13 10:52:23.089: E/ActivityB(15391): onPause02-13 10:52:23.109: E/ActivityA(15391): onStrat02-13 10:52:23.109: E/ActivityA(15391): onResume02-13 10:52:23.440: E/ActivityB(15391): onStop02-13 10:52:23.440: E/ActivityB(15391): onDestory

B中的OnStop()以及OnDestory()方法是在A重新回到前台之后,才调用的,所以,当我们在B中的OnDestory()中调用方法之前,A中的OnStart()方法就重新回到前台了,也就是,在这种情况下,我们在与刚好位于其栈下方的Activity及时性要求很高的情况下,我们不能将B中很多数据的处理放在OnDestory()方法执行。


在这种情况下,Google通常给予我们一种方案,就是onActivityResult(int requestCode, int resultCode, Intent data) 方法,友情提示,OnActivityResult方法,也是有很多坑的,比如很多时候接受不到这个方法,这与 Activity 的加载模式(launchMode)有关,加载的Activity必须为标准模式。具体方法使用,请查找相关代码。


0 0
原创粉丝点击