Android程序的入口点是什么,不是Main()吗

很多初入Android开发的网页可能不知道Android程序的入口点是什么,不是main()吗,当然我相信回复onCreate的在字面上不算错,但是你们想的是Activity中的onCreate 方法吧,其实真正的入口点entrypoint是什么。

Android使用Google Dalvik VM,相对于传统Java VM而言有着很大的不同,在Sun的Java体系中入口点和标准c语言一样是main(),而每个Android程序都包含着一个Application 实例,一个Application实例中有多个Activity、Service、ContentProvider或Broadcast Receiver。因为大部分的应用都包含Activity所以,说很多人认为是Activity的onCreate,但是你没有发现你的工程中有多个 Activity吗? 你可能没有见过没有Activity的Android应用吧。

其实在android.app.Application这个包的onCreate才是真正的Android入口点,只不过大多数开发者无需重写该类,他的继承关系如下图:

java.lang.Object
   ? android.content.Context
     ? android.content.ContextWrapper
       ? android.app.Application

android.app.Application类包含了4个公开的方法

void  onConfigurationChanged(Configuration newConfig)
void  onCreate()  //这里才是真正的入口点。
void  onLowMemory()
void  onTerminate()

所以真正的Android入口点是application的main,你可以看下androidmanifest.xml的包含关系就清楚了,并不是每个应用都必须有Activity的。

时间: 2024-12-13 05:05:12

Android程序的入口点是什么,不是Main()吗的相关文章

Android程序的入口点

原文:Android程序的入口点 android应用程序,由一到多个Activity组成.每个Activity没有很紧密的联系,因为我们可以在自己的程序中调用其它Activity,特别是调用自己的代码之外生成的Activity,比如android提供的发短信或者打电话的Activity. Intent call = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+phonenumber); startActivity(call); Inte

Windows 程序启动性能优化(先载入EXE,后载入DLL,只取有限的代码载入内存,将CPU的IP指向程序的入口点)

一.重定位链接时重定位:目标文件一般由多个节组成,编译器在编译每个目标文件时一般都是从0地址开始生成代码.当多个代码节合成一个代码段时,需要根据其在最终代码段中的位置做出调整.同时,链接器需要对已经解析的符号分配运行时地址.这个过程就是重定位. 加载时重定位:程序中可能调用了DLL,由于EXE是最先被加载的,所以一般都能加载到其想要的内存地址上:而DLL的加载一般在EXE之后,就需要对DLL中的地址进行重定位了. 二.程序的启动过程WIN32程序启动过程包括: (1)操作系统把程序加载到内存,并

可执行程序的入口点在那里?(强化概念:程序真正的入口是mainCRTstartup)

今天终于有时间来研究一下一个很大很大的工程编译成一个exe和若干dll后,程序是如果执行它的第一条指令的?操作系统以什么规则来找到应该执行的第一条指令(或说如何找到第一个入口函数的)? 我们以前写windows程序时,都是先写个main()函数,然后再写自己的逻辑:然后编译,然后点击exe就能运行我们的程序了:如果我们用VS2005工具生成一个非空工程,工程会为我们提供一个int _tmain(int argc, _TCHAR* argv[])或WinMain()函数的入口,然后我们在里面添加程

Android程序入口以及项目文件夹的含义和使用总结—入门

1 Android程序的入口 1.1 Activity类 在andriod的应用程序中,用户所感知的都是一个个应用界面,在android程序里面每个应用界面对应一个 Activity类,这类似于.NET Winform项目中的Form窗体.与WinForm中的Form一样,Activity类也是一个基类,每个视图界面都是继承Activity的.下面看一下Activity的扩展类的代码. public class MainActivity extends Activity { @Override 

IT观察】网络通信、图片显示、数据库操作……Android程序员如何利用开源框架

每个Android 程序员都不是Android应用开发之路上孤军奋战的一个人,GitHub上浩如烟海的开源框架或类库就是前人为我们发明的轮子,有的轮子能提高软件性能,而有的轮子似乎是以牺牲性能为代价换取编程速度.擅长利用轮子的程序员已经遥遥领先,不擅长利用轮子的程序员总是嫌前人发明的轮子不够圆,自己造个方轮子上路后才发现落后了. 作者:玖哥来源:51CTO|2017-10-19 16:06 移动端 收藏 分享 [51CTO.com原创稿件]每个Android 程序员都不是Android应用开发之

逆向课程第二讲,寻找main入口点

一丶识别各个程序的入口点 入门知识,识别各个应用程序的入口点 (举例识别VC 编译器生成,以及VS编译生成的Debug版本以及Release版本) 1.识别VC6.0 Debug版本 1.1 首先,新建一个VC debug版本的程序,然后F5运行,可以看到栈回溯窗口 1.2 而后通过栈回溯窗口,点击mainCRTStarup,查看main函数之前会调用什么API 确定之后,OD打开查看. 可以看到调用API的位置,但是怎么确定那个是入口点,我们知道,  VC中的main函数是3个参数,那么我们只

程序定义了多个入口点。使用 /main (指定包含入口点的类型)进行编译

原文:请使用/main进行编译,以指定包含入口点类型 在使用VS工具初学C#的时候需要不停的写小程序,觉得每次都新建项目太过麻烦,所以试着把程序写在一个项目下面,结果编译的时候出错了,因为我每个小程序都使用的Main()方法,而VS的提示信息虽然看得懂原因,却不明白要怎么做,后来查阅MSDN得到解决办法,在此与跟我有同样疑惑的人分享: 解决办法: VS界面点击:项目-->XX属性-->应用程序  在此页有一个启动对象属性设置成你想启动的那个类名就可以了. 另外:/main进行编译是指在CMD命

常见各种语言程序入口点代码

Borland Delphi 6.0 - 7.000509CB0 > $ 55 PUSH EBP00509CB1 . 8BEC MOV EBP,ESP00509CB3 . 83C4 EC ADD ESP,-1400509CB6 . 53 PUSH EBX00509CB7 . 56 PUSH ESI00509CB8 . 57 PUSH EDI00509CB9 . 33C0 XOR EAX,EAX00509CBB . 8945 EC MOV DWORD PTR SS:[EBP-14],EAX0050

构造三层时报错“程序 “D:\MyTest\....”不包含适合于入口点的静态"Main"方法”

错误 1 程序“D:\MyTest\EBookShop\Model\obj\x86\Debug\Model.exe”不包含适合于入口点的静态“Main”方法 原因:原来创建项目的时候,用的是“空项目”,我以为这样就会生成类库,实际上,一开始准备运行的时候,就会提示以上错误. 解决办法:1.右键类库属性 2.然后将输出类型由控制台应用程序改为类库 这样就好了,重新生成吧! 总结:下次注意,直接创建类库,如下图: 构造三层时报错"程序 "D:\MyTest\...."不包含适合于