原文: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 }

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

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

  1. Android程序的入口点和全局变量设置--application

    首先看看 application的官方文档 我之前一直以为Android程序的入口点就是带MAIN和LAUNCHER的Activity的onCreate方法,看来我是错了~  原来真正的入口点是 Ap ...

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

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

  3. Servlet程序的入口点是?( )

    Servlet程序的入口点是?( ) A.init() B.main() C.service() D.doGet() 解答:C

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

    一.重定位链接时重定位:目标文件一般由多个节组成,编译器在编译每个目标文件时一般都是从0地址开始生成代码.当多个代码节合成一个代码段时,需要根据其在最终代码段中的位置做出调整.同时,链接器需要对已经解 ...

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

    新接触一门程序或者开发框架,我一般都要先弄清楚程序的入口在哪里,程序怎么运行的:建立一个项目后,各个文件夹有什么作用以及如何使用等等.理清楚这些东西对以后开发是很有好处的,古话说得好,工欲善其事,必先 ...

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

    今天终于有时间来研究一下一个很大很大的工程编译成一个exe和若干dll后,程序是如果执行它的第一条指令的?操作系统以什么规则来找到应该执行的第一条指令(或说如何找到第一个入口函数的)? 我们以前写wi ...

  7. 脱壳:OEP(即程序入口点)查找 --- 基本思路和常见方法

    OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳. PUSHAD (压栈) 代表程序的入口点, POPAD (出栈) 代表程序的出口 ...

  8. (转) MFC的入口点与消息循环,消息映射

    博文分析的很不错,尤其是替换默认窗口过程的这块,本人觉得,所有的这些都可以参阅侯杰的<深入浅出MFC >. 来自:http://blog.csdn.net/sryan/article/de ...

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

    逆向课程第二讲,寻找main入口点 一丶识别各个程序的入口点 入门知识,识别各个应用程序的入口点 (举例识别VC 编译器生成,以及VS编译生成的Debug版本以及Release版本) 1.识别VC6. ...

随机推荐

  1. jquery.session.js使用

    // jquery.session.js 简单使用方法 添加数据    $.session.set('key', 'value') 删除数据    $.session.remove('key'); 获 ...

  2. PHP框架学习之Laravel基本功能

    Laravel5的功能不是一般的多(路由,中间件,blade模版...),单是一个路由功能就让哥很蛋疼,虽说路由使用起来变得很灵活,但真他妹的有点变态了.这里是我照着Laravel5官方文档研究的成果 ...

  3. laravel的模块化是如何实现的

    laravel的模块化是如何实现的 在laravel提供的官方文档上,有一个这样的名词 服务提供者,文档中介绍了它在laravel框架中的角色,以及如何使用它,但却没有讲明服务提供者的本质--它是为了 ...

  4. 【自学php】第四天 - 使用数组

    php支持两种数组,数字索引数组和关联数组.关联数组有点类似Map,可以用字符串或其他数据类型做键对应相应的值保存在数组中. 1.初始化数组 数字索引数组的初始化可以使用如下代码: $products ...

  5. VS2012编译错误信息,错误列表却没显示

    今天在写代码的时候,发现VS有编译错误,在错误列表里面却没有显示错误信息,百思不得其解. 后来终于发现,错误列表弄了个筛选,所以就看不到错误信息了,晕死.有遇到该问题的,可以参考下.

  6. pagespeed 安装(chrome版和firefox版)

    原文地址:http://blog.sina.com.cn/s/blog_6c9da636010103va.html pagespeed  让你的网站页面打开速度飞起来! 1.firefox版本下的安装 ...

  7. 我终于解决UM编辑器了 泪......

    气死我了..... 好不容易测试好了....更显得我笨了..... 原来....什么都不用改   只改了2个小位置....真的是.....回首自己 不敢看 0.0 OK  记下步骤  以免以后忘记 将 ...

  8. 十大算法 pagerank 傅里叶变换

    来源于最近阅读的一些链接 首先是介绍十大算法的 http://blog.jobbole.com/70639/ 然后是pageRank算法 http://blog.jobbole.com/23286/ ...

  9. C# List<T>中Select List Distinct()去重复

    List<ModelJD> data = myDalJD.GetAllDataList(); List<string> list= new List<string> ...

  10. su 切换用户

    大部分Linux发行版的默认账户是普通账户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户,Linux中切换用户的命令是su或su - 前者只是切换ro ...