在我的onCreate()
方法中,我显示了在权限选择对话框出现之前正在执行的Toast,即使我先请求权限。为什么吐司首先出现?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
provider = locationManager.getBestProvider(new Criteria(), false);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSIONS_REQUEST_CODE);
}
}
Toast.makeText(MainActivity.this, "oncreate", Toast.LENGTH_SHORT).show();
}
答案 0 :(得分:3)
您调用的requestPermissions
方法以异步方式运行,因此一旦该调用转到新线程并返回到主线程,则Toast可能会出现在对话框之前。它只取决于在后台完成了多少工作以及哪个线程更快。
有关权限和异步部分的详细信息,请查看此处的文档:https://developer.android.com/training/permissions/requesting.html#perm-request
此方法异步运行:它立即返回,在用户响应对话框后,系统调用应用程序的回调方法并将结果传递给app传递给requestPermissions的相同请求代码( )。