Android super 的 onRequestPermissionsResult 实用程序

Android onRequestPermissionsResult utility of super

当我使用 onRequestPermissionsResulti 时,保留 super 有用吗?

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

如果我们看super方法

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
        @NonNull int[] grantResults) {
    mFragments.noteStateNotSaved();
    int index = (requestCode >> 16) & 0xffff;
    if (index != 0) {
        index--;

        String who = mPendingFragmentActivityResults.get(index);
        mPendingFragmentActivityResults.remove(index);
        if (who == null) {
            Log.w(TAG, "Activity result delivered for unknown Fragment.");
            return;
        }
        Fragment frag = mFragments.findFragmentByWho(who);
        if (frag == null) {
            Log.w(TAG, "Activity result no fragment exists for who: " + who);
        } else {
            frag.onRequestPermissionsResult(requestCode & 0xffff, permissions, grantResults);
        }
    }
}

我不太明白超级的目标,也许只是为了日志?

我可以安全地删除所有地方的 super 方法吗?

当您处理 super 方法时,请通过查看其源代码来检查它在做什么。 (Ctrl + 单击)。

在您的情况下,class FragmentActivityAppCompatActivity 的父 class)的方法 onRequestPermissionsResult 具有将结果转发到的代码它的碎片。所以如果你需要片段中的结果,这是必要的,否则你可以去掉 super 调用。此外,如果您直接使用 Activity class 作为 activity,您可以将其删除。

Fragment 的情况下,方法 onRequestPermissionsResult 没有主体。所以你可以删除 super 调用。

不调用 .super() 不再是一种选择。不知道这更改了什么版本,但 Android Studio 现在坚持为 AppCompatActivity 的任何子类调用 .super()

奇怪的是,即使有这个错误,代码仍然可以编译和运行!我猜这是为了避免破坏旧代码。在不久的将来查找编译器错误。

:调用.super()。看起来 google 真的 想要你。