Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中的main()在哪里?_Java_Android - Fatal编程技术网

Java Android中的main()在哪里?

Java Android中的main()在哪里?,java,android,Java,Android,我是Android新手,当时正在研究这个框架,它迫使我提出这个问题。因为我们正在扩展Android中的活动,所以在Activity中必须有main或者有一个Activity实现的隐藏类包含main 我到处找,但找不到。如果有人能给出一个明确的想法,我将不胜感激 onCreate() Method....See lifecycle of android class (Activity)..... 在Android中,操作系统使用Dalvik虚拟机。应用程序执行的主要入口点封装在框架中。您可能需要

我是Android新手,当时正在研究这个框架,它迫使我提出这个问题。因为我们正在扩展Android中的活动,所以在
Activity
中必须有
main
或者有一个
Activity
实现的隐藏类包含
main

我到处找,但找不到。如果有人能给出一个明确的想法,我将不胜感激

onCreate() Method....See lifecycle of android class (Activity).....

在Android中,操作系统使用Dalvik虚拟机。应用程序执行的主要入口点封装在框架中。您可能需要查看“”


事实上,Android中的每个活动都可以被认为是一个单独的应用程序,有自己的生命周期。

您可以在清单文件中告诉它在启动时运行哪个应用程序。没有
main()
函数,因为不必有
main()
可能是一种用于“常规”java应用程序的约定,但它不适用于浏览器小程序之类的东西。系统创建活动对象并调用其中的方法,这些方法可以称为main,也可以不称为main。在这种情况下,情况并非如此

onCreate
不同于
main()
方法和构造函数,因为它可以在单个活动上调用两次,例如进程被终止,用户导航回活动。看


许多您可能认为是Java“应用程序”的东西没有自己的
main()
方法。例如,IIRC、servlet、WARs等没有
main()
方法--
main()
方法(如果有)在容器中。

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

在Android的情况下,Dalvik虚拟机(在Android 5.0 DVM被Android Runtime取代后)被设计为查找一个类,该类是
Activity
的子类,并被设置为启动器,以从其
onCreate()
方法启动应用程序的执行,因此不需要
main()
方法


有关更多信息,请参见
活动的生命周期

Android使用java语言,但使用修改后的运行时模型执行。正如其他人所说,每个包中都包含一个清单。此清单中指定了启动点。转到android站点并完成基本教程。这将帮助您了解创建/部署/运行流程和基本应用程序生命周期。阅读博客文章了解Android应用程序是如何启动的:

在Android系统启动期间,Linux内核首先调用 进程“init”。init读取文件“/init.rc”和“init.device.rc”。 “init.device.rc”是特定于设备的,在该文件的虚拟设备上 名为“init.goldfish.rc”

init.rc通过程序“/system/bin/app_进程”启动进程“Zygote”。Zygote加载核心Java类和 对它们执行初始处理。这些类可以由 Android应用程序,因此这一步使他们更快地 开始一旦受精卵的最初工作完成,这个过程就会倾听 一个套接字并等待请求

如果你在课堂上看,你会发现主要的方法

正如其他人提到的,这个
main()
方法涉及到Android应用程序环境的设置。对于开发人员来说,起点是启动器活动的
onCreate()
方法。

实际上,
main()
方法是Android框架类
Android.app.ActivityThread
。此方法为操作系统进程创建主(UI)
线程
,在其上设置
循环器
,并启动事件循环

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


Android的体系结构与您可能习惯于独立Java应用程序的体系结构略有不同。最大的区别在于,您的所有组件(
活动
服务
广播接收器
,等等)不一定在同一操作系统进程或同一虚拟机(VM)中运行。可以让单个应用程序的组件在不同的OS进程中运行,也可以让不同应用程序的组件在同一OS进程中运行。在传统Java中,
main()
方法是在创建操作系统进程并且虚拟机完成其初始化后由虚拟机调用的方法。

当启动新进程以运行应用程序/服务时,最后在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将通知新流程执行真正的活动启动流程,它根据清单创建活动类,然后调用OnCreate等


这里有一些答案是完全错误的,它获得了很多选票,希望一个温和的etc能够检查这一点。

是的……这更抽象。我很感激你的回答,但是如果它是一个java类,它怎么会没有main并启动呢?我很感激你的回答,但是如果它是一个java类,它怎么会没有main并启动呢