小米系统居然在动态请求权限的时候再次实例化当前activity

代码很简单


代码

可以看到就只有两句话,请求权限和请求行为得到用户答复之后的回调。

说说问题,在小米手机上居然会出现两次弹框,甚至是三次。而且多次探矿之后根本不走回调

后来的发现:不走回调之后按下返回键居然没有退出activity而且开始走回调了。

由此引发的猜想:真相只有一个,在权限弹框的时候,再一次实例了当前的activity,前面的activity处于不可见状态当然也就不走回调了。而且按下返回键产生的奇怪现象也有了合理的解释,activity是被finish了,只不过是新生成的activity,我们还有一个被覆盖的出来了,造成activity没有被finish的错觉。同时由于获得焦点,回调也开始走了。

验证猜想:不让多次实例activity,将activity改成单例模式。实验结果:仍然多次弹框但是会走回调函数。猜想验证通过。由此产生的联想:在小米中获取权限要在SplashActivity进入之后,这样才能通过小米的测试并且比较顺利的上架的原因也是这个。

那么接下来应该怎么办?喊雷军改bug?

你可能感兴趣的:(小米系统居然在动态请求权限的时候再次实例化当前activity)