android应用运行中,在设置中修改权限,返回应用崩溃

权限管理

我程序中使用了PermissionsDispatcher进行权限的管理,具体使用方法,参考Android 6.0运行时权限详解

问题重现

使用PermissionsDispatcher进行程序管理,在程序运行过程中,申请权限和拒绝权限都不会出现问题,后来发现,在程序运行过程中,比如进入某个页面,然后点击home键,在设置中,选择该应用,关闭某个权限,再返回该应用,点击back键,会出现闪退的情况,跟踪log,发现是某个字段变成了Null,刚开始以为程序问题,后来调试时发现,在设置修改权限以后,程序进程变成了dead,如图:
在这里插入图片描述
发现微信的操作方法就是,设置关闭某个权限,就重新启动。
最初的解决办法,是在onResume方法里边,先保存一下现有权限,进入界面以后,再重新获取一下权限,看看有没有改变,如果权限改变,就重新进入启动页,重新获取数据,但是失败了,因为进程已经被杀死了,不会再走onResume方法。
最后的解决办法:在一个Activity的基类的onCreate方法中,判断savedInstanceState是否为null,如果为null,说明是正常启动,如果有数据,就是设置被修改,异常关闭情况下,程序会保存一些数据,所以在有数据的情况下,重新打开启动页。

 protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        Log.e("onCreate","savedInstanceState:"+savedInstanceState);
        if(savedInstanceState!=null){
            Intent intent=new Intent(UI.this, SplashActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(intent);
        }
    }

调试结果:
在这里插入图片描述
savedInstanceState:null是正常启动的情况,savedInstanceState有数据,是修改过权限,返回当前页面的情况,所以根据有没有数据,可以决定是否重新打开启动页。

参考文章:Android在应用设置里关闭权限,返回生命周期处理

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值