Android之屏幕旋转之后当前activity被finish了依然被拉起来

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011068702/article/details/81638403

1 问题

        屏幕旋转之后当前activity被finish了依然被拉起来

2 分析思路


 不用finish函数,使用

android.os.Process.killProcess(android.os.Process.myPid());

还是被拉起来了,然后采用

System.exit(0);


还是被拉起来了,然后我就看app的进程,有2个进程,当一个activity被finish之后,有个进程pid变了,我不用finish了,不是有2个进程pid吗,我都获取通过过滤再去用代码杀死,依然还是被拉起来, 我以为是其它进程通过服务把这个我finish的Activity拉起来,代码太杂了,我又找不到地方,不知道该怎么分析然后请教了另外一个同事,先看他打日志看到了命令grep -v ****

但是我不知道-v是什么意思,然后百度下加上自己的理解-v是反向查找的意思可以这样理解

过滤的内容包含关键字word

grep  word

过滤的内容不包含关键字word

grep -v word

模拟必现问题,然后打印当前的日志分析,然后打印当前的activity任务栈,我之前都习惯用的

adb shell dumpsys activity top

打印顶层activity或者用

adb shell dumpsys activity

但是这个太多了,不好分析,

同时用的

adb shell dumpsys activity activities


打印当前的activity任务栈
一眼就分析了,我这个activity界面底层还有一个activity,然后我finish只把当前的activity杀死了,但是我的屏幕旋转了,当finish当前activity的时候,底层的activity也要执行onCreate方法,所以再次被拉起来了


3 解决办法


      方法一:finish之前在底层activity打一个标记,当在底层activity执行onCreate方法的时候判断是否需要finish底层activity,这样改很容易引发bug,而且动不动就会导致app起不来,放弃了
         方法二:在AndroidManifest.xml里面的底层activity声明的时候,加上属性

android:configChanges="orientation|screenSize|keyboardHidden"


     这样屏幕旋转,底层的activity就不会执行onCreate方法了,我们知道如果activity不配置这个属性的话,我们屏幕旋转依然会执行onCreate onStart onResume方法

 

 

 


4 总结

  必现的问题还是需要打印日志分析,把问题现象不正常的地方日志开始看起来,其实我的日志已经打印了部分日志是在底层的activity里面执行的onCreate方法里面的日志,我以为这个日志是上层activity的日志,所以以为没啥用,如果分析到这个是底层activity打印的日志的话,也会让我有思路再次弹出是从底层的activity的弹出的,不是从其它进程通过服务拉起来的.

猜你喜欢

转载自blog.csdn.net/u011068702/article/details/81638403
今日推荐