(Google ドキュメントによると) 基本的な Android 開発の要件の 1 つは、アクティビティのライフサイクル メソッド (onCreate、onResume、onPause など) をオーバーライドするときは、最初に親のメソッドを呼び出す必要があることです。
@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 パターンを使用しないという設計上の決定の背後にある理由は何でしたか?
更新: しばらくの間 Android 向けの開発を行ってきましたが、職場の全員が私の BaseActivity NVI クラスを使用していますが、すべてのライフサイクル メソッドではなく onCreate メソッドで NVI を使用しない理由にまだ遭遇していません。既存のAPI設計を擁護して回答/コメントした人は、本当に正当化されていないか、NVIパターンが何であるかを本当に理解していないように見えるので、私は良いことはないと仮定して行きます理由は、「そのまま」だからです。