Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何修复';SuperNotCalledException“;关于onDestroy?_Java_Android_Exception_Super - Fatal编程技术网

Java 如何修复';SuperNotCalledException“;关于onDestroy?

Java 如何修复';SuperNotCalledException“;关于onDestroy?,java,android,exception,super,Java,Android,Exception,Super,我在片段中使用onDestroy来确保在退出应用程序时停止处理程序(用于设置按钮动画),如下代码所示: @Override public void onDestroy () { if (anim1 !=null && run1 !=null) { anim1.removeCallbacks(run1); } super.onDestroy (); } anim1是处理程序;run1是可运行的 代码在我的测试设备中按预期工作(运行各种And

我在片段中使用onDestroy来确保在退出应用程序时停止处理程序(用于设置按钮动画),如下代码所示:

@Override
public void onDestroy () {
    if (anim1 !=null && run1 !=null) {
        anim1.removeCallbacks(run1);
    }
    super.onDestroy ();
}
anim1是处理程序;run1是可运行的

代码在我的测试设备中按预期工作(运行各种Android版本,但不是6.0或8.1-正如您将看到的,这将是一个问题)。从谷歌控制台报告和总体反馈来看,它也适用于绝大多数用户

换句话说,如果用户试图离开应用程序(或移动到另一个片段),而Handler/Runnable仍然存在,则不会引发异常,并且
anim1.removeCallbacks(run1)按预期触发,没有错误

然而,从谷歌控制台的报告来看,一些安卓6.0和8.1用户有一个超级NotCalledException(下面提供了日志)。从数字上看,与6.0相比,8.1用户似乎受到的影响更大

我知道问题出在我的onDestroy实现中,因为这个错误(SuperNotCalledException)只有在我实现了上面的代码之后才开始出现在Google控制台上。在我获得NPE之前,因为应用程序退出时处理程序仍在运行(此错误不再存在)

我只收到一些错误报告,所以很明显,它只影响少数用户。但我想知道我做错了什么,以及如何修复它

我已经研究过其他类似的问题,例如:

但它们似乎与我的问题无关。
super.ondestory
在我的代码中,它位于末尾。logcat也不太透露(至少对我来说):

你知道我可以进一步解决这个问题吗?我感到有点困惑,因为实际上是3行代码导致了这个问题,我不知道如何把它们放在一起


如果您需要任何进一步的详细信息或代码,请告诉我,我很乐意提供。

我正在添加我的解决方案,以防其他人发现它有用。 事实证明,问题不在这个特定的片段和代码中,而是在另一个类似的片段中

我已经复制/粘贴了所有的代码,但在某个地方,我在搜索时发现的代码是这样的:

@Override
public void onDestroy () {
    if (anim1 !=null && run1 !=null) {
    anim1.removeCallbacks(run1);
    super.onDestroy ();
    }
}
由于
super.ondestory()
意外地在if语句中结束,因此当
anim1
和/或
run1
为空时,每当活动被破坏时,都无法访问它。由于logcat没有报告发生异常的片段,所以检测异常并不容易


这个故事的寓意是,始终检查代码的所有实例,即使您已经复制/粘贴了它。

我正在添加我的解决方案,以防其他人发现它有用。 事实证明,问题不在这个特定的片段和代码中,而是在另一个类似的片段中

我已经复制/粘贴了所有的代码,但在某个地方,我在搜索时发现的代码是这样的:

@Override
public void onDestroy () {
    if (anim1 !=null && run1 !=null) {
    anim1.removeCallbacks(run1);
    super.onDestroy ();
    }
}
由于
super.ondestory()
意外地在if语句中结束,因此当
anim1
和/或
run1
为空时,每当活动被破坏时,都无法访问它。由于logcat没有报告发生异常的片段,所以检测异常并不容易


故事的寓意是,始终检查代码的所有实例,即使您已经复制/粘贴了代码。

您是否使用了最新版本的片段支持库实现?AndroidX实现可能会更新,尽管您似乎正在使用支持库。另外,您确定要等到
onDestroy()
来清理此问题吗?也许,
onDestroyView()
会更好。感谢您提供使用onDestroyView()的提示,我没有想到这一点。我试试看。对我来说,复制/解决这个问题有点困难,因为正如我所说的,它似乎只影响少数用户。您是否正在使用最新版本的支持库片段实现?AndroidX实现可能会更新,尽管您似乎正在使用支持库。另外,您确定要等到
onDestroy()
来清理此问题吗?也许,
onDestroyView()
会更好。感谢您提供使用onDestroyView()的提示,我没有想到这一点。我试试看。对我来说,复制/解决这个问题有点困难,因为正如我所说的,它似乎只影响少数用户。