android java main_Java-Android中的main()在哪里?

news/2024/7/17 18:14:15

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


http://www.niftyadmin.cn/n/4395125.html

相关文章

Maven参考指南

本篇文章将会后续完善 官网:http://maven.apache.org/ 中央仓库:http://search.maven.org/#browse%7C47 Spring-webmvc:http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.springframework%22%20AND%20a%3A%22spring-webmvc%22 常用…

java 分布式会话_突破Java面试(43)-分布式Session方案的实现

1 面试题集群部署时的分布式session如何实现?2 Session简介浏览器有个cookie,在一段时间内这个cookie都存在,然后每次发请求过来都带上一个特殊的jsessionid cookie,就根据这个东西,在服务端可以维护一个对应的session…

inotify+rsync同步、多台客户端实时同步数据脚本

目录 一、rsync远程同步 1、rsync的作用和特点 2、常见的备份工具和rsync软件包的安装 二、配置rsync同步数据 1.关闭防火墙 2.服务端下载rsync 3.修改配置文件 4.修改身份验证数据库权限 5.创建共享目录,并创建个测试文件 6.客户端开启数据同步 7.免密设置 目录 一…

common-jdbc配置

1.使用Maven构建依赖关系 <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> 2.spring配置dataSource bean对象 <bean id"dataSource…

anaconda python环境_使用 Anaconda 管理 Python 环境

介绍Anaconda是一个用于科学计算的Python发行版&#xff0c;支持 Linux, Mac, Windows系统&#xff0c;提供python环境管理和包管理功能&#xff0c;可以很方便在多个版本python之间切换和管理第三方包&#xff0c;Anaconda 使用 conda 来进行 Python 环境管理和包管理。安装这…

java long 空_Java 使用 long 出现空指针异常

Java 使用 long 出现空指针异常问题是这样的&#xff0c;比如下面这个方法定义&#xff1a;public Long getPersinalId(String token){if (StringUtil.isBlank(token)) {return null;}Long id null;id ConstantDict.getInstance().GetTokenCache().get(token);if (id null){…

Log4j指南

参考&#xff1a;http://wenku.baidu.com/view/50471b41be1e650e52ea9943.html 1.pom.xml配置 <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency>2.配置log4j.pro…

静态导入类的属性和方法

1.要导入的类 package wodwl.a; public class A {public static int count0;public static void print(){System.out.println("From A");}} 2.测试类 package wodwl.b; import static wodwl.a.A.*; public class B { public static void main(String[] args) {…