基本 Android 开发的要求之一(根据 Google 文档)是,当您覆盖 Activity 的生命周期方法(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()
}
}
我还没有遇到过需要在调用 super 方法之前编写任何指令的情况。有没有什么时候我们不应该调用超级方法,或者不先调用它?如果对于生命周期中的任何特定方法,它确实必须始终处于首位,那么设计决定不使用 NVI 模式来执行它的原因是什么?
更新: 现在已经为 Android 开发了一段时间,工作中的每个人都使用我的 BaseActivity NVI 类,但我仍然没有遇到一个原因,不是对所有生命周期方法使用 NVI,而是 onCreate 方法。似乎那些为现有 API 设计辩护/评论的人并没有真正的理由,或者似乎并不真正理解 NVI 模式是什么,所以我假设没有好的原因,它“就是这样”。