在Activity
類中,Android爲重載的生命週期回調方法提供了運行時強制執行super()
must be called。如果你忘記這麼做,它會拋出SuperNotCalledException。Android如何實現對SuperNotCalledException的檢查?
究竟是如何特別在Android上實現的?如果可能,請指出實際的源代碼實現。
在Activity
類中,Android爲重載的生命週期回調方法提供了運行時強制執行super()
must be called。如果你忘記這麼做,它會拋出SuperNotCalledException。Android如何實現對SuperNotCalledException的檢查?
究竟是如何特別在Android上實現的?如果可能,請指出實際的源代碼實現。
看起來他們clear a flag in the super methods and check that it was set:
final void performStart() {
mCalled = false;
mInstrumentation.callActivityOnStart(this);
if (!mCalled) {
throw new SuperNotCalledException(
"Activity " + mComponent.toShortString() +
" did not call through to super.onStart()");
}
}
作爲一個側面說明機器人剛剛宣佈了新的註釋,@CallSuper那滴你只要超級不叫的@CallSuper註釋的方法,當它警告得到過度。
更多細節:
我不知道這是爲什麼調用錯誤super.x方法不會導致應用程序崩潰?我不確定這是否已修正,但之前您可以在onStart中調用super.onResume,並且不會拋出異常... – ScouseChris 2012-08-08 15:03:12
它很有道理;只有一個標誌。由於這是爲了防止人們忘記調用'super()',我無法想象有人會不經意地調用另一個'super()'方法。 – 2012-08-08 15:07:16