java - MainActivity 不是静态类,但它在没有任何显式实例化的情况下执行。如何?

标签 java android

创建新应用时,我们首先定义MainActivity类,然后填充其OnCreateOnPauseOnResume em> 方法等

现在,MainActivity 不是一个静态类,并且没有任何实例化,我们能够查看其中方法的代码执行。这是如何工作的?

最佳答案

提出基本问题并没有什么错……实际上,这种模式并不是 Android 特有的,而是只要中间有一些框架就会发生。一些基本示例是 java Applet 和 Servlet。

当您启动 Java 应用程序时,您会启动 JVM,然后需要向其中加载一些内容:因此您需要一个静态方法(主要),因为 JVM 中还没有可以引用的对象到。

如果中间有某种框架,那么该框架将启动 JVM 并开始用自己的服务对象填充它:编写代码意味着编写自己的对象(这将是给定对象的子类) "template")。然后框架可以注入(inject)(加载)您的对象。框架服务对象通过调用"template"父类(super class)中定义的生命周期方法来管理注入(inject)对象的生命周期。

因此,例如,当您向浏览器提供小程序时,您不会启动静态 main 方法:您宁愿只提供 java.applet.Applet 的子类,该子类实现一些实例方法,这些实例方法充当回调来管理生命周期(初始化、绘制、停止...)。浏览器将启动 JVM、实例化启动小程序所需的内容、加载您的小程序并调用它。

类似地,使用 servlet,您可以对 javax.servlet.http.HttpServlet 类进行子类化并实现一些实例(非静态)方法(doGet、doPost...)。 Web 容器(例如 Tomcat)将负责启动 JVM、实例化启动 servlet 所需的内容、加载 servlet 并调用它。

Android 中的模式几乎相同:您要做的就是创建 android.app.Activity 的子类。当您启动应用程序时,系统会在 list 中查找应启动哪个 Activity ,然后“框架”加载它并调用其实例方法(onCreate、onPause、onResume...)。

关于java - MainActivity 不是静态类,但它在没有任何显式实例化的情况下执行。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21135183/

相关文章:

java - 如何按顺序确定一条线上的点(从 P1 到 P2)?

android - Viewpager 在滑动和选项卡上禁用最后一页

android - 如何在接到电话时停止电话铃声,但不全局静音

android - 三星 A10 android 11 如何从我的应用程序以编程方式创建其他应用程序固定快捷方式

java - Hibernate:将多对多映射到 Map

java - Jenkins 开发中的依赖注入(inject)

Java 2d 游戏关键听众时间限制

java - 从代码内部创建内存快照 (Java)

android - 如何在 Android 中以编程方式获取当前 GPS 位置?

Java:如何导出使用 .txt 文件的程序?