【问题标题】:Is onResume() called after onRequestPermissionsResult() in Android?在 Android 中的 onRequestPermissionsResult() 之后是否调用了 onResume()?
【发布时间】:2017-05-04 08:02:51
【问题描述】:

我有一个活动,我已将checkSelfPermissionrequestPermissions 方法放入onCreate 方法中。

我在 onCreate 之外还有一个 onRequestPermissionsResult 方法。

最后我也有一个onResume 方法。

首先调用的是onResume还是onRequestPermissionsResult

【问题讨论】:

  • 如果你把requestPermissions放在onCreate()中,onRequestPermissionsResult会在onResume()之前被调用
  • 是什么阻止你自己做一些测试?只需几行代码,在这里写问题并等待任何人回答的时间要少得多。

标签: java android android-permissions


【解决方案1】:

正确的事件链如下:

  1. 您在 Activity 的 onCreate

  2. 中调用 requestPermissions
  3. requestPermissions 开始在另一个线程中运行,因为它是 旨在不阻塞 UI 线程。因此,您的活动会经过 onStart,然后是 onResume

  4. 权限请求生成一个对话框,触发 onPause 在 Activity 上,因为它不再处于前台位置。

  5. 此时Activity暂停,可以看到一个对话框 要求允许或拒绝该权限。

  6. 您做出选择,对话框得到解决并且 onResume 是 在 Activity 上调用。

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

现在您还可以了解为什么不应该将 requestPermissions 放在 onResume 中。

【讨论】:

  • 我也有同样的问题。谢谢你的详细解释!
  • onstart 和 onresume 可能根本不会被调用 - 这就是为什么在 oncreate 中调用 requestPermissions 是错误的
【解决方案2】:

第一个是onRequestPermissionsResult

我在onPause() 上销毁了一些对象,它将在onResume() 上重新创建,但我发现我的onRequestPermissionsResult() 操作了一些被销毁的对象并导致NullPointEx

【讨论】:

    【解决方案3】:

    onResume() 将在您的Activity 启动期间首先被调用,因为onRequestPermissionsResult(...) 只会在用户在权限请求对话框中接受或拒绝对应用程序的权限后调用。但是在调用onRequestPermissionsResult(...) 之后再次调用 onResume 以允许您的活动考虑用户选择(授予或拒绝权限)并相应地执行代码

    【讨论】:

      【解决方案4】:

      onCreate 在第一次启动活动时第一次调用,并且仅调用一次。

      onResume 直接在onCreate 之后调用或在暂停后活动返回时调用。

      在用户确认权限后调用onRequestPermissionsResult

      结论:onResumeonRequestPermissionsResult之前被调用。

      您可以阅读 Activity LifeCycle https://developer.android.com/guide/components/activities/activity-lifecycle.html

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

      【讨论】:

      • 已编辑。谢谢@TimCastelijns
      • 这个答案不正确。 onRequestPermissionsResult 在 onResume() 之前调用。您是否在任何设备上进行过测试?
      • 你有这个答案的来源吗?你指的文件不是onRequestPermissionRequest的顺序
      • 我已经对此进行了测试,当 onRequestPermissionsResult 方法结束时,再次调用 onResume。
      猜你喜欢
      • 2016-05-14
      • 2011-05-14
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多