Android 6.0 运行中用户手动去设置界面取消该app的某个权限,app该怎么处理这块的逻辑?

Android 6.0 运行中用户手动去设置界面取消该app的某个权限,或者在权限设置界面取消然后再重新手动给与该权限,再次进入该app,其实里面的数据和对象已经被回收了但是有没有崩溃,界面还在。没有走onDestroy,onPause等函数,如果是 Fragment 会直接被回收,但是又没有走 onDestroyView , onDestroy ,onDetach 这些周期函数,宿主的周期函数也没有被执行,这个问题该怎么解决?有人可能会说在主活动onResume监听权限改变,但是只要上面第一句执行了,后面的都没用,曾经考虑过动态监听权限改变,然后得到结果后重启应用,这个目前是作为备用方案,希望可以在这里看看大家有没有更简单粗暴的好办法

阅读 15.7k
7 个回答

谢谢各位的解答,我的问题都不属于你们回答的范围,我已经把项目重构,彻底解决了这个问题!

你去修改权限的时候你的activity必然会切换出去吧,onStop一般都会调用,至少onPause也应该会走,再回到你的界面的时候onResume会被调用,所以放在onResume里检查就可以了。如果不放心,你还可以在每次获取数据(就是实际用到权限的地方)的时候再检测一次。

目前想到的办法:
1.写一个注解,在某些需要权限的方法加上注解,自动检测权限的情况
2.那就是用到权限的地方都检测每次都检测

如果一直需要这些权限,baseActivity的onResume 里统一检查

新手上路,请多包涵

你好,请问你是怎么解决这个问题的,我最近也在被这个问题困扰

新手上路,请多包涵

刚才碰到这个问题~测试了下~~~发现一个问题~当APP在运行的时候。如果去设置里关闭权限~APP的进程就被杀死了。

你好,我刚刚解决了这个问题。
我的结构如图:图片描述

很常规的布局,MainFragment中有栏目1,2.
由Viewpager + Fragment完成的。
取消后发现MainFragment中一片空白。
log发现,当打开Setting界面时,MainFragment中走了onSaveInstanceState(...);方法,并且每次启动时都会走Fragment的onViewStateRestored(...);方法,且正常进入时onViewStateRestored所携带Bundle为null,而取消权限之后走这个方法Bundle不为null。
所以我在onSaveInstanceState(...);中序列化了数据,并在onViewStateRestored(...);所携带Bundle不为null的情况下,重新初始化了控件,并赋予数据。
不常回答问题,有点啰嗦,请见谅!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题