先直接贴出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 复原方法,这就是我的解决方法,如果有更好的,麻烦评论告诉我一下共同进步。