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的弹出的,不是从其它进程通过服务拉起来的.