我有一项活动,我已将checkSelfPermission
和requestPermissions
方法放入onCreate
方法。
我在onCreate之外也有onRequestPermissionsResult
方法。
最后我也有onResume
方法。
首先调用哪一个,onResume
或onRequestPermissionsResult
?
答案 0 :(得分:11)
正确的事件链如下:
您在活动的 onCreate
requestPermissions
requestPermissions
开始在另一个线程中运行,因为它是
设计为不阻止UI线程。因此,您的活动需要依次经过 onStart 和 onResume
权限请求将生成一个对话框,该对话框将触发 在活动上 onPause ,因为它不再处于前台位置。
当前活动已暂停,您可以看到一个对话框 要求允许或拒绝许可。
您做出选择,对话框得到解决,并且 onResume 是 调用了Activity。
还要注意,对话框 onPause 总是在活动的 onStart 和 onResume 之后触发,无论它花费多长时间。在其中执行代码。
现在您还可以了解为什么不应该将requestPermissions放在 onResume 中。
答案 1 :(得分:2)
with logged_in as (
select userid, :convo_id conversation_id
from sessions
where session = :session
),
user_allowed as (
select count(1) > 0 is_allowed
from logged_in
join conversation_users using (userid, conversation_id)
)
select l.userid is not null is_logged_in,
a.is_allowed,
c.body,
c.time,
c.user
from user_allowed a
left join logged_in l on true
left join conversation using (conversation_id)
启动期间将首先调用 onResume()
,因为只有在用户在“权限请求”对话框中接受或拒绝应用程序权限后才会调用Activity
。但是在调用onRequestPermissionsResult(...)
之后再次调用onResume以允许您的活动考虑用户选择(授予或拒绝权限)并相应地执行代码
答案 2 :(得分:1)
第一个是onRequestPermissionsResult
!
我已经销毁了onPause()
上的某个对象,并将在onResume()
上重新创建,但是我发现我的onRequestPermissionsResult()
操作了一些销毁的对象并导致了NullPointEx
答案 3 :(得分:-4)
onCreate
在第一次启动活动时首先调用一次。
onResume
在onCreate
后或在暂停后返回活动时直接调用。
在用户确认权限后调用onRequestPermissionsResult
。
结论:在onResume
之前调用onRequestPermissionsResult
。
您可以阅读有关活动生命周期https://developer.android.com/guide/components/activities/activity-lifecycle.html
的信息如果有帮助,请标记为已回答。