我有一个活动,并在onCreate
方法中使用了checkSelfPermission
和requestPermissions
方法。
我还有一个位于onCreate
之外的onRequestPermissionsResult
方法。
最后,我也有一个onResume
方法。
onResume
和onRequestPermissionsResult
哪个会首先被调用?
我有一个活动,并在onCreate
方法中使用了checkSelfPermission
和requestPermissions
方法。
我还有一个位于onCreate
之外的onRequestPermissionsResult
方法。
最后,我也有一个onResume
方法。
onResume
和onRequestPermissionsResult
哪个会首先被调用?
在Activity的onCreate中调用requestPermissions
requestPermissions
会在另一个线程中运行,因为它被设计成不阻塞UI线程。所以你的Activity会执行onStart和onResume
权限请求会生成一个对话框,这时会触发Activity的onPause,因为它不再处于前台位置。
此时Activity已经暂停,你可以看到一个对话框询问是否允许或拒绝该权限。
你做出选择后,对话框就会解决,同时在Activity上调用onResume。
还要注意的是,无论执行其中的代码需要多长时间,对话框总是会在Activity的onStart和onResume之后触发其onPause。
现在你也可以看出为什么不应该将requestPermissions放在onResume中。
第一个是onRequestPermissionsResult
!
我在onPause()
中销毁了一些对象,并且它们将在onResume()
中重新创建,但我发现我的onRequestPermissionsResult()
操作了一些已销毁的对象,导致了NullPointEx
异常。
onResume()
方法会在启动Activity
时首先被调用,而onRequestPermissionsResult(...)
方法只有在用户在权限请求对话框中接受或拒绝应用程序权限后才会被调用。但是,在onRequestPermissionsResult(...)
方法被调用后,onResume()
方法会再次被调用,以便让您的活动考虑到用户的选择(授予或拒绝权限)并相应地执行代码。
onCreate
在 Activity 第一次启动时被调用,且仅被调用一次。
onResume
在 onCreate
调用后直接被调用,或者在 Activity 暂停后返回时被调用。
onRequestPermissionsResult
在用户确认权限后被调用。
结论:在 onRequestPermissionsResult
之前会先调用 onResume
。
您可以阅读有关 Activity 生命周期的文档 https://developer.android.com/guide/components/activities/activity-lifecycle.html
如果有帮助,请标记为已回答。
onRequestPermissionRequest
的顺序。 - ymonad
onCreate()
中使用了requestPermissions
,那么onRequestPermissionsResult
会在onResume()
之前被调用。 - tahsinRupam