Android程序的入口点

原文:Android程序的入口点

android应用程序,由一到多个Activity组成.每个Activity没有很紧密的联系,因为我们可以在自己的程序中调用其它Activity,特别是调用自己的代码之外生成的Activity,比如android提供的发短信或者打电话的Activity.

Intent call = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+phonenumber);

startActivity(call);

Intent sms = new Intent(Intent.ACTION_SENDTO,Uri.parse("smsto:"+phonenumber);

startActivity(sms);

从这点上看,android应用程序实际上是由多个Activity按照一定的次序拼装起来的, 只不过拼装的过程中,后台传递了一些数据,使得各个Activity之间能比较好的衔接起来.

在 android应用程序中,并没有像c++和java这样有main函数来作为应用程序的入口.android应用程序提供的是入口Activity,而非入口函数.

在eclipse中创建一个android应用程序的时候,默认会创建一个Activity. 这个Activity实际上就是入口Activity了.AndroidManifest.xml文件中定义了整个android应用所包含的Activity.  
默认生成的Activity的定义为:

<activity android:name=".activity01" android:label="@string/app_name">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

action节点中的android.intent.action.MAIN表明它所在的Activity是整个应用程序的入口点.而category中的android.intent.category.LAUNCHER意思是把这个Activityg归属到加载器类,即把这个Activity标注为自动会加载和启动的Activity,这样程序启动时候就先加载这个Activity了.

我们可以对比下eclipse中console端输出的日志来看下.初始,我把    <category android:name="android.intent.category.LAUNCHER" />这一行在原先的xml文件中注释掉了.可以看到控制台会报错"No Launcher activity found!",实际上此时在虚拟设备上的应用程序列表中找不到"lifecycle_test"这个app,而且也没法运行,根本加载不起来.后面把注释去掉,还原到最初始的状态,然后在启动应用,可以看到"No
Launcher activity found!"这部分报错信息没有了,而且虚拟设备的屏幕上,可以看到"lifecycle_test"这个app已经成功运行了.

[2011-08-11 09:29:10 - lifecycle_test] ------------------------------

[2011-08-11 09:29:10 - lifecycle_test] Android Launch!

[2011-08-11 09:29:10 - lifecycle_test] adb is running normally.

[2011-08-11 09:29:10 - lifecycle_test] No Launcher activity found!

[2011-08-11 09:29:10 - lifecycle_test] The launch will only sync the application package on the device!

[2011-08-11 09:29:10 - lifecycle_test] Performing sync

[2011-08-11 09:29:10 - lifecycle_test] Automatic Target Mode: using existing emulator ‘emulator-5554‘ running compatible AVD ‘myavd_2.2‘

[2011-08-11 09:29:15 - lifecycle_test] Application already deployed. No need to reinstall.

[2011-08-11 09:29:15 - lifecycle_test] \lifecycle_test\bin\lifecycle_test.apk installed on device

[2011-08-11 09:29:15 - lifecycle_test] Done!

[2011-08-11 09:30:47 - lifecycle_test] ------------------------------

[2011-08-11 09:30:47 - lifecycle_test] Android Launch!

[2011-08-11 09:30:47 - lifecycle_test] adb is running normally.

[2011-08-11 09:30:47 - lifecycle_test] Performing test.activity.leipei.activity01 activity launch

[2011-08-11 09:30:47 - lifecycle_test] Automatic Target Mode: using existing emulator ‘emulator-5554‘ running compatible AVD ‘myavd_2.2‘

[2011-08-11 09:30:47 - lifecycle_test] Uploading lifecycle_test.apk onto device ‘emulator-5554‘

[2011-08-11 09:30:47 - lifecycle_test] Installing lifecycle_test.apk...

[2011-08-11 09:30:54 - lifecycle_test] Success!

[2011-08-11 09:30:55 - lifecycle_test] Starting activity test.activity.leipei.activity01 on device emulator-5554

[2011-08-11 09:30:57 - lifecycle_test] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=test.activity.leipei/.activity01 }

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-23 07:56:18

Android程序的入口点的相关文章

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

很多初入Android开发的网页可能不知道Android程序的入口点是什么,不是main()吗,当然我相信回复onCreate的在字面上不算错,但是你们想的是Activity中的onCreate 方法吧,其实真正的入口点entrypoint是什么. Android使用Google Dalvik VM,相对于传统Java VM而言有着很大的不同,在Sun的Java体系中入口点和标准c语言一样是main(),而每个Android程序都包含着一个Application 实例,一个Application

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\....”不包含适合于入口点的静态&quot;Main&quot;方法”

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