4

Activity该类中,Android 提供了super() 必须为被覆盖的生命周期回调方法调用的运行时强制。如果你忘记这样做,它会抛出 SuperNotCalledException。

这具体是如何在 Android 上实现的?如果可能,请指出实际的源代码实现。

4

2 回答 2

1

看起来他们在超级方法中清除了一个标志并检查它是否已设置

final void performStart() {
    mCalled = false;
    mInstrumentation.callActivityOnStart(this);
    if (!mCalled) {
        throw new SuperNotCalledException(
            "Activity " + mComponent.toShortString() +
            " did not call through to super.onStart()");
    }
}
于 2012-08-08T14:59:37.723 回答
0

作为旁注,android刚刚宣布了一个新注释@CallSuper,当它被覆盖时,当@CallSuper注释方法没有调用super时,它会向您发出警告。

更多细节:

http://tools.android.com/tech-docs/support-annotations

于 2015-06-16T13:51:32.287 回答