【转】关于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了.从哪里定义它是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了.参考手册上是这么说的----"the LAUNCHER category says that this entry point should be listed in the application launcher."意思和我理解的有出入.不过意思都是说这个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-12-25 07:52:35

【转】关于android应用程序的入口的相关文章

android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明

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

【苦读官方文档】2.Android应用程序基本原理概述

官方文档原文地址 应用程序原理 Android应用程序是通过Java编程语言来写.Android软件开发工具把你的代码和其它数据.资源文件一起编译.打包成一个APK文件,这个文档以.apk为后缀,保存了一个Android应用程序全部的内容.Android设备通过它来安装相应的应用. 一旦安装到设备上.每一个Android应用程序就执行在各自独立的安全沙盒中: Android系统是一个多用户的Linux系统.每一个应用都是一个用户. Android系统默认会给每一个应用分配一个唯一的用户ID(这个

framework启动流程之android应用程序

转载请注明出处:http://blog.csdn.net/droyon/article/details/38022887 Linux启动流程大体分三歩:1.开机启动bootloader.2.操作系统内核初始化.3.执行第一个应用程序. 1.开机就是给硬件设备上电,在上电过程中cpu的作用是执行执行,故而,只有其他硬件设备初始化ok,cpu执行指令才有意义,故而cpu最后上电. cpu复位完毕就开始执行固定内存的程序指令,此时的执行所在的程序称作"bootloader"引导程序.用于装载

Android应用程序UI硬件加速渲染环境初始化过程分析

在Android应用程序中,我们是通过Canvas API来绘制UI元素的.在硬件加速渲染环境中,这些Canvas API调用最终会转化为Open GL API调用(转化过程对应用程序来说是透明的).由于Open GL API调用要求发生在Open GL环境中,因此在每当有新的Activity窗口启动时,系统都会为其初始化好Open GL环境.这篇文章就详细分析这个Open GL环境的初始化过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! Open

关于Android应用程序漏洞的防护措施

目前,Android应用程序市场的发展速度飞快,不少开发者为了追求开发速度而忽视应用程序的安全.但由于Android系统的开源性及其Java编写的特殊性,各类Android App经常被爆出漏洞,有的Android开发者只是对App进行混淆代码或是防二次打包,对于源码的保护并不到位,同时也不清楚其中所隐藏的漏洞. 腾讯御安全作为一个专注于为个人和企业移动应用开发者提供全面的应用安全服务的平台,其丰富的漏洞特征库,能够全面覆盖已知漏洞,可对99%的安卓APP进行漏洞风险扫描.同时,基于广大用户的漏

Android应用程序签名详解

http://blog.csdn.net/lyq8479/article/details/6401093 本文主要讲解Android应用程序签名相关的理论知识,包括:什么是签名.为什么要给应用程序签名.如何给应用程序签名等. 1.什么是签名?      如果这个问题不是放在Android开发中来问,如果是放在一个普通的版块,我想大家都知道签名的含义.可往往就是将一些生活中常用的术语放在计算机这种专业领域,大家就开始迷惑了.计算机所做的事情,或者说编程语言所做的事情,不正是在尽可能地模拟现实吗?所

Android应用程序框架之无边界设计意图

Android的应用框架的外特性空间的描述在SDK文档有十分清楚的描述,Android应用的基本概念,组件生命周期等等有详细的描述.在外特性空间中,Android提供了Activity,Service,Broadcast receivers,Content Provider,Intent,task等概念,我在这里不讨论这些概念定义,因为SDK文档已经讲得够详细. 在阅读SDK文档和研究Activity这个概念时,我感觉到了在Android中若隐若现的Android自由无边界这个设计意图.Andr

Android应用程序进程启动过程的源代码分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址: http://blog.csdn.net/luoshengyang/article/details/6747696 Android 应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信 机制:这两个特点都是在进程的初始化过程中实现的,本文将详细分析Android应用程序进程创建过程中是如何实现这两个特点的. Android应用程序框架层创建的应用程序进程

Android应用程序签名详解 简介

转自: http://blog.csdn.net/lyq8479/article/details/6401093 本文主要讲解Android应用程序签名相关的理论知识,包括:什么是签名.为什么要给应用程序签名.如何给应用程序签名等. 1.什么是签名?      如果这个问题不是放在Android开发中来问,如果是放在一个普通的版块,我想大家都知道签名的含义.可往往就是将一些生活中常用的术语放在计算机这种专业领域,大家就开始迷惑了.计算机所做的事情,或者说编程语言所做的事情,不正是在尽可能地模拟现