在Android中,onResume()方法是否在onRequestPermissionsResult()方法之后被调用?

9

我有一个活动,并在onCreate方法中使用了checkSelfPermissionrequestPermissions方法。

我还有一个位于onCreate之外的onRequestPermissionsResult方法。

最后,我也有一个onResume方法。

onResumeonRequestPermissionsResult哪个会首先被调用?


如果你在 onCreate() 中使用了 requestPermissions,那么 onRequestPermissionsResult 会在 onResume() 之前被调用。 - tahsinRupam
4
你为什么不自己进行一些测试呢?写几行代码的时间比在这里提问并等待回答要短得多,而且还可以使内容更加通俗易懂。 - Marcin Orlowski
4个回答

34
正确的事件顺序如下:
  1. 在Activity的onCreate中调用requestPermissions

  2. requestPermissions会在另一个线程中运行,因为它被设计成不阻塞UI线程。所以你的Activity会执行onStartonResume

  3. 权限请求会生成一个对话框,这时会触发Activity的onPause,因为它不再处于前台位置。

  4. 此时Activity已经暂停,你可以看到一个对话框询问是否允许或拒绝该权限。

  5. 你做出选择后,对话框就会解决,同时在Activity上调用onResume

还要注意的是,无论执行其中的代码需要多长时间,对话框总是会在Activity的onStartonResume之后触发其onPause

现在你也可以看出为什么不应该将requestPermissions放在onResume中。


我有完全相同的问题。感谢您提供详细的解释! - Grandpapa
1
onStart和onResume可能根本不会被调用 - 这就是为什么在onCreate中调用requestPermissions是错误的。 - Marian Paździoch

4

第一个是onRequestPermissionsResult

我在onPause()中销毁了一些对象,并且它们将在onResume()中重新创建,但我发现我的onRequestPermissionsResult()操作了一些已销毁的对象,导致了NullPointEx异常。


2

onResume()方法会在启动Activity时首先被调用,而onRequestPermissionsResult(...)方法只有在用户在权限请求对话框中接受或拒绝应用程序权限后才会被调用。但是,在onRequestPermissionsResult(...)方法被调用后,onResume()方法会再次被调用,以便让您的活动考虑到用户的选择(授予或拒绝权限)并相应地执行代码。


-5

onCreate 在 Activity 第一次启动时被调用,且仅被调用一次。

onResumeonCreate 调用后直接被调用,或者在 Activity 暂停后返回时被调用。

onRequestPermissionsResult 在用户确认权限后被调用。

结论:在 onRequestPermissionsResult 之前会先调用 onResume

您可以阅读有关 Activity 生命周期的文档 https://developer.android.com/guide/components/activities/activity-lifecycle.html

如果有帮助,请标记为已回答。


已编辑。感谢@TimCastelijns。 - Quang Phạm Văn
这个答案是不正确的。onRequestPermissionsResult在onResume()之前被调用。你有在任何设备上测试过吗? - dev
你有这个答案的来源吗?你指出的文档没有提到onRequestPermissionRequest的顺序。 - ymonad
{btsdaf} - jmartinalonso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接