Android 重启Acticity以及重启后的生命周期变化

先直接贴出chon重启的代码:

Intent intentReStrat = getIntent();
finish();
startActivity(intentReStrat);

代码就这么简单实际上就这三行,可是当我们实际用的时候会发现有一些不对劲,比如果我在onDestory等生命周期做了什么的时候,所以我们在每个生命周期打上Log看一下

LogUtil.chunyLog().d("onCreat"+ this);

在Activity的每个生命周期都有这个log(后面加this是为了看不同的Activity,因为重启是有新生成新的和销毁上一个两个步骤的)

OK,剩下的就是弄一个按钮在点击事件里把最开始的重启代码写上去

加些来运行。。。

先会出现如下情况:

可以看到先是走了onCreat  onStart onResume  这些不用说了,houm后面我们看到

@1ecbcf6f  这个就是这个Activity特有的

 

接下来点击按钮,重启Acticity:

接下来就要认真看一下了,我们为了方便把前面的Activity(@1ecbcf6f ) 说成Aty1  

把后来新建的@2005b14f  dang当成新的Aty2   这样就好理解了

OK,接下来复原一下发生了什么

当我们点击按钮之后,Aty1走了onPause 先暂停了

然后Aty2 走了 onCreat onStart onResume 三个创建成功

加下来Aty1  走了onStop  onDestory 被杀死了

可以看到当新的Aty创建后还走了上一个Aty的onStop 和onDestory  这里就会出现一点we

 

问题了,每个情况不一样,我的是因为绑定Service了,

在onDestory里面 调用了Service里面一个恢复默认的方法 ,这样就会造成一个问题,当我重启Aty之后在后调用的是上一个Aty的onDestory 恢复默认了就会变成重启Aty后没有执行一进来做的事情,所以不对

 

解决方法:

每个人的解决方法不一样,我的是用SP,在点击按钮的时候把存SP里面的boolean变量(叫asd把)存成true

然后在调用Service方法那里 就是onDestory 取出asd , 如果是true就不调用Service方法,并且把asd赋值false

然后else里面执行退出的方法,这样我们可以模拟一下

 

一进来Aty直接退出的时候asd是false(默认)所以走else 直接退出调用Service退出方法复原,如果是点击按钮了,就是先把

asd存成true  然后就没有走service 复原方法,这就是我的解决方法,如果有更好的,麻烦评论告诉我一下共同进步。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值