创建新应用时,我们首先定义MainActivity类,然后填充其OnCreate、OnPause、OnResume 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/