android - 什么时候可以在入口点活动类中省略对 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
.
情况是否一直如此,我只是没有意识到这一点,或者是否有能力忽略在某些时候添加的覆盖调用?这是不好的做法吗?这是否会阻止您通过通常通过的Bundle
or与您的孩子和父班级建立联系?Context
super.onCreate()
解决方案
您必须实现此回调,该回调在系统首次创建活动时触发。
这并不意味着如果应用程序没有实现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 内容的基本活动;可能他们需要将图像处理的代码保留ClassifierActivity
在CameraActivity
.
推荐阅读
- python - 如何使用 OpenCV 计算类似 skimage 的图像直方图?
- android - 覆盖底部 NavView 项的 Fragment (ScrollView)
- python - 无需 QuTip 工具箱即可重新实现 QuTip 功能
- python - networkx中的约束短路径算法?
- javascript - React 函数组件重新渲染,并且 useRef 值在单击“提交”按钮时也会消失
- python - Python 中的 Pandas Dedupe - 如何让脚本自动运行?
- python - 如何选择不同的 A 列,然后在 DJANGO 中汇总 B 列的值?
- python - 在 Visual Studio Code 中为 git 命令激活 virtualenv
- javascript - react.js 中的表单验证不起作用,比较两个字段的最佳实践?
- c - 我开始使用或学习c语言