一個基本的Android開發(根據谷歌文檔)的要求是,當你重寫了活動的生命週期方法(的onCreate,的onResume,在onPause等),必須調用父類的方法首先:Android活動生命週期:爲什麼不調用超級方法先執行?
@Override
protected void onResume()
{
super.onResume();
}
爲什麼Android API不使用非虛擬接口模式來強制執行此行爲,而不是依靠開發人員記得這樣做?:
Android的Activity Base類可能看起來像這樣(粗略示例) :
public class Activity
{
public final void onResume()
{
// do important things here
virtualOnResume();
}
protected abstract void virtualOnResume();
}
由Android開發者編寫
子類:
public class MainActivity extends Activity
{
@Override
protected void virtualOnResume()
{
// do custom stuff here, without needing to call super.onResume()
}
}
我還沒有遇到過,我需要寫之前調用父類方法的任何指令的情況下。有沒有時間我們不應該調用超級方法,或者不先調用它?如果對於生命週期中的任何特定方法來說,它必須始終是第一位的,那麼設計決定背後的原因是不使用NVI模式來執行它?
UPDATE:現在已經開發Android的同時,每個人都在工作中使用我的BaseActivity NVI類,而且我還沒有遇到一個理由不使用的NVI的所有生命週期方法,但一個的onCreate。似乎那些回答/評論捍衛現有API設計的人並沒有真正的理由,或者似乎並不明白NVI模式是什麼,所以我假設沒有好的原因,這是「它是如何」。
您不必調用'super.onResume();'只需調用'super.onCreate(...)'在'Activity'中是強制性的。除此之外,您可以完全覆蓋任何方法。 –
Google文檔明確聲明總是在所有生命週期方法中調用super的方法。無論如何,即使它只是onCreate方法,同樣的問題代表:爲什麼不使用NVI呢? – orfdorf
你能鏈接到它聲明這一點的文檔部分嗎?因爲它只需要'onCreate()'。如果你不在'onCreate()'中調用'super.onCreate()',就會拋出一個異常。 –