异步显示权限解释

时间:2017-01-07 12:43:42

标签: android android-permissions

从Android 6.0开始,在运行时请求权限,而不是在安装之前请求权限。

Android official doc推荐了以下代码:

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {

        // Show an explanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } else {
        // No explanation needed, we can request the permission.
        ...
    }
}

我对以上示例代码中的一件事感到困惑,这就是为什么上面的评论说" 向用户显示解释异步 & #34 ;?这是一个遵循的惯例吗?我的意思是,如果我只是打算弹出一个对话框来解释为什么需要权限,我不会看到需要异步弹出对话框。我只是不明白为什么google会推荐异步代码。

它是否表明谷歌不希望开发者弹出对话框,但做了一些重大动作?嗯...无论如何,对此非常困惑。

1 个答案:

答案 0 :(得分:5)

  

遵循惯例吗?

这是所有Android应用开发中的标准概念,尤其是在处理UI时。它也非常需要,因为Android中没有适用于同步UI的API。

  

我的意思是,如果我打算弹出一个对话框来解释为什么需要权限,我不认为需要异步弹出对话框。

您在Android中弹出的每个对话框都是异步弹出的。当您致电show()时,对话框在show()返回时不会显示。它是计划出现,它会在您将控制权返回给主应用程序线程后的某个时间出现。这就是谷歌在这里所说的“异步”。

同步用户界面,如果调用show()显示对话框阻止进一步执行代码,直到对话框消失,这样你就知道了什么用户在show()后面的下一个语句中使用该对话框。