隐式跳转遇到的坑
问题描述
有这样一个需求
页面A中根据操作获得到一个值a,把a作为参数传入列表页面B并获取列表数据。点击列表进入相册页面C,并在该页面通过跨应用(系统相机、相册)添加图片。
实现时,我把a存入一个静态类,并在B中通过这个静态类获取该变量(别问为啥),在每次返回A页面时将a置空(onResume)。当在C中进行两侧跨应用跳转(比如调用系统相机)后,程序崩溃了
然后我也崩溃了,因为日志里说是a在B页面中报空指针了。而此时B页面甚至不可见。
问题分析
通过打印log,我发现在跳转相机后,会调用到onSaveInstanceState方法,众所周知该方法为页面在意外销毁时用于恢复的方法。这说明在跳转的时候由于什么原因导致当前页面被杀死了,再通过打印onResume,我发现当第二次跳转相机时,应用会莫名其妙的顺着整个返回栈通走一遍,没有走onRestoreState,却走进了onResume!于是当走到A的onResume时,a被置空了。于是在B页面中导致空指针
问题解决
不再置空a,就可以了,之后确实也没再发生此类事情。不过我依旧不解,为什么不可见的页面的onResume会被触发。如果有大佬能告知就太棒了