Java-Android中的main()在哪里?
我是Android的新手,正在研究框架,因此不得不问这个问题。 由于我们要在Android中扩展Activity,因此Activity中的某个位置必须有main,或者Activity实现的隐藏类包含main。
我到处看,但找不到。 如果有人可以提出一个明确的想法,我将不胜感激。
8个解决方案
63 votes
在核心Java程序中,我们需要Activity方法,因为在执行字节代码时,JVM将在类中搜索onCreate()方法并在那里开始执行。
对于Android,Dalvik虚拟机旨在查找一个类,该类是Activity的子类,并且被设置为LAUNCHER以从其onCreate()方法开始执行应用程序,因此无需main()方法 。
有关更多信息,请参见Activity的生命周期。
Chandra Sekhar answered 2020-07-25T11:44:06Z
19 votes
实际上,main()方法是Android框架类Activity。此方法为OS进程创建Main(UI)Service,在其上设置BroadcastReceiver并启动事件循环。
Android框架负责创建和销毁OS进程,启动应用程序,启动活动,服务和其他组件。 Activity是Android框架的一部分,它负责协调和管理不同的组件。
Android的体系结构与您惯常使用的独立Java应用程序有所不同。 最大的不同是您的所有组件(Activity、Service、BroadcastReceiver等)不一定都在同一OS进程或同一虚拟机(VM)中运行。 可能有一个应用程序中的组件在不同的OS进程中运行,也有可能使不同应用程序中的组件在同一OS进程中运行。 在传统的Java中,main()方法是在创建OS进程并且虚拟机完成其初始化之后由虚拟机调用的方法。
David Wasser answered 2020-07-25T11:44:36Z
16 votes
Android使用Java语言,但使用修改后的运行时模型执行。 正如其他人所说,每个软件包中都包含一个清单。 在此清单中指定了启动点。 转到android网站并进行基本教程。 这将使您了解创建/部署/运行过程以及基本的应用程序生命周期,从而开始运行。
BobF answered 2020-07-25T11:43:36Z
8 votes
阅读此博客条目,以了解Android应用程序如何启动:
在Android系统启动期间,Linux内核首先调用 处理“初始化”。 init读取文件“ /init.rc”和“ init.device.rc”。 “ init.device.rc”是特定于设备的,在虚拟设备上此文件 被称为“ init.goldfish.rc”。
init.rc通过程序“ / system / bin / app_process”启动进程“ Zygote”。 Zygote加载核心Java类,并 对它们执行初始处理。 这些类可以被重用 Android应用程序,因此此步骤使它们更快地 开始。 Zygote的初始工作完成后,该过程将侦听 一个套接字并等待请求。
如果查看ZyogoteInit类,则会找到main方法。
正如其他人提到的那样,此main()方法涉及设置Android应用程序环境。 就开发人员而言,起点是Launcher活动的onCreate()方法。
W.K.S answered 2020-07-25T11:45:15Z
3 votes
在Android中,操作系统使用Dalvik虚拟机。 应用程序执行的主要入口点封装在框架中。 您可能想看看“什么是Android?”
实际上,可以将Android中的每个Activity视为自己的单个应用程序,并具有自己的生命周期。
mauris answered 2020-07-25T11:45:40Z
2 votes
onCreate() Method....See lifecycle of android class (Activity).....
[HTTP://developer.Android.com/reference/Android/app/activity.HTML]
Samir Mangroliya answered 2020-07-25T11:45:59Z
2 votes
您可以在清单文件中告诉它在启动时运行哪一个。 因为没有必要,所以没有main()函数。 main()可能是用于“常规” java应用程序的约定,但不适用于浏览器小程序之类的约定。 系统创建活动对象并在其中调用方法,该方法可以称为也可以不称为main。 在这种情况下,不是。
main()与main()和构造方法的不同之处在于,它可以在单个活动中被调用两次,例如,如果进程被杀死并且用户导航回到该活动。 看到这个
您可能认为许多事情都是Java“应用程序”的,它们没有自己的main()方法。 例如,IIRC,Servlet,WAR等没有main()方法-容器中有main()方法(如果有)。
Frankline answered 2020-07-25T11:46:29Z
0 votes
当您开始运行App / Service的新过程时,最后在ActivityManagerService.java中,有:
final String entryPoint = "android.app.ActivityThread";
return startProcessLocked(hostingType, hostingNameStr, entryPoint, app, uid, gids,
runtimeFlags, mountExternal, seInfo, requiredAbi, instructionSet, invokeWith,
startTime);
最后调用Process.start。 这与标准Java相同,您传入一个类,然后VM创建一个新进程并执行ActivityThread.java的main():
public static void main(String[] args) {
......
Looper.loop();
throw new RuntimeException("Main thread loop unexpectedly exited");
}
主要功能将触发一些操作,该操作会发送IPC消息以通知Activity Manager该进程已成功启动,然后在通知该事件的新进程启动后,Activity Manager将通知新进程进行实际操作。 活动启动过程,该过程根据清单创建Activity类,然后调用OnCreate等。
这里有一些完全错误的答案,它得到了很多票,希望有一个温和的人可以检查一下。
jw_ answered 2020-07-25T11:47:04Z