棉花糖权限:组件生命周期

3

研究棉花糖权限模态框,它在 Activity 或 Fragment 的 onResume() 之前调用了 onRequestPermissionsResult()

问题陈述:

如果我们在操作结果(即允许的权限)上执行任何操作,比如我想要删除当前片段,则由于片段和容器活动都处于暂停状态,这是不可能的。那么有没有办法在调用onRequestPermissionsResult()之前调用onResume()?

解决方案,我正在使用

我正在使用用于权限的标志,在onRequestPermissionsResult()上进行重置,并在onResume()上验证。但在我的情况下,这似乎是一种令人困惑的方式。


尝试一下这个,它可能有效 stackoverflow.com/a/41221852/5488468 - Bipin Bharti
1个回答

4

无法更改实现这些回调的顺序,但可以轻松地通过一些技巧来解决。我将展示两种不同的方法:

简单的POST请求:

private static final Handler uiHandler = new Handler(Looper.getMainLooper());

@Override
public void onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) {
    if(... condition ...)
        uiHandler.post(onPermission_condition);
}

private Runnable onPermission_condition = new Runnable(){
    @Override
    public void run(){
        ... do stuff here
    }
}

使用标记:

private boolean shouldDoStuff = false;

@Override
public void onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) {
    if(... condition ...)
        shouldDoStuff = true;
}

@Override
public void onResume(){
  super.onResume();
  if(shouldDoStuff) {
     shouldDoStuff = false;
     ... do stuff here  
  }
}

标志解决方案在我的情况下会造成一些混淆。但是处理程序解决方案我从未尝试过。所以我将尝试并更新您。感谢宝贵的答案。 - Pankaj Kumar
我认为Handler解决方案并不好。它需要更多的时间来完成,因此您的'onResume()'可能仍然会在'onRequestPermissionsResult'之后被调用,但概率较小。我认为使用标志仍然是更好的选择,因为它是正确的。(但非常丑陋)我仍然不知道更好的解决方案。 - Ioane Sharvadze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接