Android - 在片段中,onStart()之前是否调用onResume()?

时间:2016-11-25 23:30:28

标签: java android android-fragments android-permissions onresume

在我建立的应用程序的一部分中,有一个嵌入式zxing qr扫描仪,我在片段中使用它。

如果该应用尚未授予Manifest.permission.CAMERA权限,则会询问该权限,然后继续启用扫描程序。

问题是,我在barcodeView.resume()内拨打了onResume(),我在onStart()中要求获得许可。因此,它应该在barcodeView.resume()内请求{em>首先和之后的权限。但显然恰恰相反,如果应用程序尚未被授予权限,则会抛出此异常

  

java.lang.NullPointerException:尝试调用虚方法' void   com.journeyapps.barcodescanner.DecoratedBarcodeView.resume()'在...上   null对象引用

怎么会发生这种情况?是不是onResume()之前没有onResume()来电?

这是我的片段代码:

onStart()

1 个答案:

答案 0 :(得分:0)

在onResume之前调用

onStart,是的。

“权限请求”对话框未阻止,因此当您请求权限时,片段生命周期将继续。

所以它会是这样的:
- onStart
- 请求许可
- onResume(此时用户尚未授予权限)。

您需要检查onResume以查看barcodeView是否为空并且已授予权限。

如果授予了权限,onStart之后将立即调用onRequestPermissionsResult,因为如果授予了权限它不是异步的,那么这段代码就能正常工作。