![](/img/trans.png)
[英]onRequestPermissionsResult not called from AppCompatActivity on Android 6
[英]Is onResume() called after onRequestPermissionsResult() in Android?
我有一个活动,我在onCreate
方法中放了checkSelfPermission
和requestPermissions
方法。
我在onCreate之外也有一个onRequestPermissionsResult
方法。
最后我也有一个onResume
方法。
首先调用哪一个, onResume
或onRequestPermissionsResult
?
正确的事件链如下:
您可以在Activity的onCreate中调用requestPermissions
requestPermissions
开始在另一个线程中运行,因为它被设计为不阻止UI线程。 所以你的活动经历onStart然后onResume
权限请求会生成一个对话框,该对话框会在Activity上触发onPause ,因为它不再处于前台位置。
此时的活动暂停,您可以看到一个对话框,要求允许或拒绝该权限。
您做出选择,对话框得到解决,并在Activity上调用onResume 。
还要注意的是, 在onPause通过对话总是活动在onStart和之后的onResume解雇,不管需要多长时间他们执行代码。
现在您还可以了解为什么不应将requestPermissions放在onResume中 。
第一个是onRequestPermissionsResult
!
我在onPause()
上销毁了一些对象,它将在onResume()
上重新创建,但我发现我的onRequestPermissionsResult()
操作了一些被破坏的对象并导致了NullPointEx
onResume()
将在Activity
的启动过程中首先被调用,因为onRequestPermissionsResult(...)
只有在用户在Permission request对话框中接受或拒绝应用程序的权限后才会被调用。 但onResume在调用onRequestPermissionsResult(...)
后再次被调用,以允许您的活动考虑用户选择(授予或拒绝权限)并相应地执行代码
onCreate
第一次启动活动时首先调用,只调用一次。
onResume
在onCreate
之后直接调用,或者在暂停后返回活动。
并且在用户确认权限后调用onRequestPermissionsResult
。
结论:在onRequestPermissionsResult
之前调用onResume
。
你可以阅读有关Activity LifeCycle的信息https://developer.android.com/guide/components/activities/activity-lifecycle.html
如果有帮助,请标记为已回答。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.