onRequestPermissionsResult:在onSaveInstanceState

时间:2017-07-17 16:30:49

标签: android android-fragments android-permissions

我使用重写的生命周期活动方法创建了测试应用程序来记录它。所以我试图在onRequestPermissionsResult中发布带有runnable的消息(handler.post())来显示对话框片段。结果不清楚。

此次runnable在 onPostResume 之后执行,第二次在 onResume 之前立即执行。要捕获此错误,您应多次请求权限。参见附件和日志:

工作测试
D / LifecycleActivity:请求许可
D / LifecycleActivity:onPause
D / LifecycleActivity:onSaveInstanceState
D / LifecycleActivity:onRequestPermissionsResult
D / LifecycleActivity:onResume
D / LifecycleActivity:onResumeFragments
D / LifecycleActivity:onPostResume
D / LifecycleActivity:onRequestPermissionsResult(已发布)
D / LifecycleActivity:显示对话框

测试失败
D / LifecycleActivity:请求许可
D / LifecycleActivity:onPause
D / LifecycleActivity:onSaveInstanceState
D / LifecycleActivity:onRequestPermissionsResult
D / LifecycleActivity:onRequestPermissionsResult(已发布)
D / LifecycleActivity:显示对话框
E / AndroidRuntime:FATAL EXCEPTION:main java.lang.IllegalStateException:onSaveInstanceState之后无法执行此操作

onRequestPermissionResult方法代码:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull 
String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, 
grantResults);

    Log.d(TAG, "onRequestPermissionsResult");

    new Handler(Looper.myLooper()).post(new Runnable() {
        @Override
        public void run() {
            Log.d(TAG, "onRequestPermissionsResult (posted)");
            displayDialog();
        }
    });
}

但我为onActivityForResult回调实现了相同的逻辑,它适用于100%。

我在issuetracker.google.com上问了这个问题:https://issuetracker.google.com/issues/37067655。我的问题是列表中的最后一个,我附加了实施的项目。

为什么onRequestPermissionsResult中的发布消息以不同的方式工作?

0 个答案:

没有答案