Android中的main()在哪里?

Bas*_*tin 44 java android

我是Android的新手,正在研究框架,它迫使我提出这个问题.由于我们在Android中扩展Activity,因此必须在main某处Activity或者有一个隐藏类来Activity实现包含它main.

我到处看,但找不到它.如果有人能够就此提出一个明确的想法,我将不胜感激.

Cha*_*har 65

在核心Java程序中,我们需要一个main()方法,因为在执行字节代码时,JVM将main()在类中搜索该方法并在那里开始执行.

在Android的情况下,Dalvik虚拟机被设计为查找一个类,该类是其子类,Activity并且被设置为LAUNCHER以从其onCreate()方法开始执行应用程序,因此不需要main()方法.

有关更多信息,请参阅生命周期Activity.

  • 您的解释描述了Android如何决定在用户​​打开App时启动哪个"Activity",但这与底层应用程序框架启动过程无关(实际上非​​常复杂).`main()`方法在Android框架类`android.app.ActivityThread`中.此方法创建Main(UI)`Thread`,在其上设置`Looper`并启动事件循环.Android框架的其他部分涉及启动/停止OS进程,启动应用程序和活动以及服务和其他组件等. (4认同)
  • @BasimallaSebastin 如果这能最好地回答你的问题,请接受它作为答案。 (3认同)
  • 实际上,在`Activity`的`onCreate()`之前调用`Application`类(或`Application`的子类)的`onCreate()`.此外,Android应用程序以"Service"或"BroadcastReceiver"开头,而不是"Activity". (2认同)

Dav*_*ser 19

实际上,该main()方法是Android框架类android.app.ActivityThread.此方法Thread为OS进程创建Main(UI),在其Looper上设置并启动事件循环.

Android框架负责创建和销毁操作系统进程,启动应用程序,启动活动,服务和其他组件.的ActivityManager是Android框架的一部分,它负责协调和管理不同的组件.

Android的体系结构与您在独立Java应用程序中使用的体系结构略有不同.最大的区别是,所有组件(的Activity,Service,BroadcastReceiver等)不相同的OS过程中或在同一个虚拟机(VM)一定运行.可以使来自单个应用程序的组件在不同的OS进程中运行,并且也可以使来自不同应用程序的组件在相同的OS进程中运行.在传统Java中,该main()方法是在创建OS进程并且虚拟机完成其初始化之后由虚拟机调用的方法.

  • @YTerle 感谢您的链接。对于所有意图和目的(即:正常应用程序),主线程和 UI 线程是相同的。如果您阅读链接的答案,那么只有一个例外,那就是 Android 框架本身的一部分。 (3认同)

小智 16

Android使用java语言,但使用修改后的运行时模型执行.正如其他人所说,每个包中都有一个清单.此清单中指定了启动点.转到android站点并执行基本教程.这将使您了解创建/部署/运行过程和基本的应用程序生命周期.


W.K*_*K.S 8

阅读博客条目以了解Android应用程序的启动方式:

在Android系统启动期间,Linux内核首先调用进程"init".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()方法涉及设置Android应用程序环境.就开发人员而言,起点是onCreate()Launcher活动的方法.

  • 实际上,在`Activity`的`onCreate()`之前调用`Application`类(或`Application`的子类)的`onCreate()`.此外,Android应用程序以"Service"或"BroadcastReceiver"开头,而不是"Activity". (2认同)