首页 > 解决方案 > 什么时候可以在入口点活动类中省略对 onCreate 的调用?

问题描述

我正在研究TensorFlow Lite Android 示例应用程序代码,并注意到它们的入口点类ClassifierActivity没有覆盖onCreate. 到目前为止,根据关于 onCreate() 的活动生命周期指南

您必须实现此回调,该回调在系统首次创建活动时触发。

我认为onCreate必须在入口点活动中调用/覆盖。我所说的入口点活动是指清单中指定的活动。

从对空活动的简单测试来看,Android 似乎只是onCreate从最低可用子类中调用该方法。

例如,如果我们有这个层次结构: Child3 <-- Child2 <-- Child1 <-- Activity

Child3 扩展 Child2 的地方,依此类推。如果只有 Child1 和 Activity 包含对的调用,onCreate并且我们仅将清单指向 Child3,它将首先onCreate调用Child1. 从 OOP 的角度来看,这是有道理的,但出于某种原因,我觉得如果之前没有覆盖它,Android 应用程序就无法构建,它让我看到一个入口点活动,而没有覆盖对onCreate.

情况是否一直如此,我只是没有意识到这一点,或者是否有能力忽略在某些时候添加的覆盖调用?这是不好的做法吗?这是否会阻止您通过通常通过的Bundleor与您的孩子和父班级建立联系?Contextsuper.onCreate()

标签: androidandroid-activityandroid-manifestoncreateactivity-lifecycle

解决方案


您必须实现此回调,该回调在系统首次创建活动时触发。

这并不意味着如果应用程序没有实现onCreate()方法就不会启动,而是意味着如果您想在屏幕上显示与默认值不同的东西,则必须实现它。因为onCreate()无论您是否实现它,都会自动调用它。

这显然在下一个短语中描述:

在 onCreate() 方法中,您执行基本的应用程序启动逻辑,该逻辑在活动的整个生命周期内只发生一次。

在不覆盖任何生命周期回调方法的情况下运行应用程序将正常运行;运行以下代码完全没有问题:

class MainActivity : AppCompatActivity() {
}

对于 TensorFlow 示例:

我正在研究 TensorFlow Lite Android 示例应用程序代码,并注意到它们的入口点类 ClassifierActivity 不会覆盖 onCreate。

它们ClassifierActivity没有覆盖onCreate(),但它从CameraActivity覆盖/实现的 which扩展而来onCreate()

  @Override
  protected void onCreate(final Bundle savedInstanceState) {
    LOGGER.d("onCreate " + this);
    super.onCreate(null);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    setContentView(R.layout.tfe_ic_activity_camera);

    if (hasPermission()) {
      setFragment();
    } else {
      requestPermission();
    }
//....

这里CameraActivity只考虑存在基本 UI 内容的基本活动;可能他们需要将图像处理的代码保留ClassifierActivityCameraActivity.


推荐阅读