Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.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
安卓是如何获得的;android.app.SuperNotCalledException“;?_Android_Exception - Fatal编程技术网

安卓是如何获得的;android.app.SuperNotCalledException“;?

安卓是如何获得的;android.app.SuperNotCalledException“;?,android,exception,Android,Exception,我很好奇android如何检测我是否在onCreate方法中调用了super.onCreate(或其他一些方法) 我猜它使用了一个标志,并看到一个标志boolean-mCalled,但不确定是否用于此检测。如果是的话,那么它会让我感到困惑,因为有很多超级方法要重写,但这些方法只有一个“mCalled”标志来检测是否调用了超级方法,这似乎是不可能的 thx for reply ~模式的工作原理如下: private boolean superCalled; private someFunctio

我很好奇android如何检测我是否在
onCreate
方法中调用了
super.onCreate
(或其他一些方法)

我猜它使用了一个标志,并看到一个标志
boolean-mCalled,但不确定是否用于此检测。如果是的话,那么它会让我感到困惑,因为有很多超级方法要重写,但这些方法只有一个“mCalled”标志来检测是否调用了超级方法,这似乎是不可能的


thx for reply ~

模式的工作原理如下:

private boolean superCalled;

private someFunction(...) {
    superCalled = false;
    someMethodThatRequiresSuperToBeCalled(...);
    if (!superCalled) {
        throw new SuperNotCalledException();
    }
}

protected void someMethodThatRequiresSuperToBeCalled(...) {
    superCalled = true;
}

如果仔细阅读代码,您会发现框架一次只对一个方法使用该标志。因此,尽管有许多方法需要调用
super.whatever()
,但它们可以共享相同的标志。

您的意思是IDE会在我的重写方法中隐式添加一些代码吗?@user1150712-否。我发布的模式是框架代码的一部分。假设您重写了onCreate
。就在框架为您的活动调用
onCreate
之前,它将
superCalled
标志设置为
false
。当调用返回时,它检查标志是否已设置为
true
,如果未设置,则抛出异常。如何找到调用“onCreate”的位置?我在eclipse中尝试了ctrl+alt+h,但显然不起作用。@user1150712-您可以在中找到它。查找
performCreate
方法。这实际上是一个不好的示例,因为
performCreate
假定标志的默认初始值为
false
(尽管您可以看到它是在
活动.onCreate中设置的)。更好的例子是其他生命周期方法(
performStart
/
onStart
performRestart
/
onRestart
等)