所有Android程式的运作流程,都定义在Activity中。

Android系统与其他系统很不一样的地方时:它的应用程式并不直接与底层系统紧密结合,而是跑在Android框架中。这意思是设计Android应用程式时,我们并不需要关心实际上运作的机器是哪一牌的手机或是哪一种嵌入式系统,或使用哪一种架构(ARM、X86、MIPS),我们要关心的只有Android框架提供了哪些功能,好让我们能操作这台设备。具体来说就是我们只要知道这台机器的屏幕大小、有没有键盘,有没有支持GPS等等信息,就知道我们写的应用程序是否能在这台机器上顺畅地运作。Android框架与底层系统的整合问题完全可以留给底层工程师来操心。

在执行【startActivity】函数时,应用程序并不是直接呼叫另一个Activity,而是将【Intent】传进Android框架中。Android框架会查看【startActivity】呼叫所传入的动作与Intent内容是否在注册表中,如果符合,就启动对应的服务或Activity。

Android系统中的每一个应用程序,在安装的过程中,都得事先在Android框架中注册、登记这个应用程序所建立的Activity,并事先注明会使用到的服务。比如当我们在Android上安装我们撰写的BMI应用程序时,BMI应用程序就会向Android框架登记相关咨询:BMI应用程序将会用到【Bmi】这个Activity。

这份信息存在于每个Android应用项目根目录下的【AndroidManifest.xml】文档中。如果我们在程式里,要用到其他应用程序或服务所提供的功能,也需一并在此列出。

在安装应用程序的时候,Android框架会根据应用程式提供的这份清单,将资讯注册于Android框架的注册表中。

备注:

Android应用程序的运作流程,存在于四种载体中:

1、Activity    2、Broadcast Intent Receiver    3、Service    4、Content Provider

预设的Activity 清单

我们使用eclipse Android 开发工具打开「BMI/AndroidManifest.xml 」档案。切换到
「AndroidManifest.xml」分页标签,查看预设的「BMI/AndroidManifest.xml」档案原始码:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http:/ /schemas.and roid.co m/apk/ res/and roid"
        package="com.demo.and roid.b mi"
        android:versionCode="1"
        android:versionName="1.0.0" >
        <application android:icon="@drawable/icon" >
                <activity
                        android:name=".Bm i" android:label="@string /app_name" >
                        <intent-filter >
                                <action android:name="and roid.intent.action.M AIN" />
                                <category android:name="and roid.intent.categor y.LAUNCHER" />
                          </intent-filter>
                </activity>
        </application>
</manifest>

我们分行讲解如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http:/ /schemas.and roid.co m/apk/ res/and roid"
....>
....
</manifest>

【AndroidManifest.xml】这个文档也是以XML格式描述的,每个Android应用程序都需要一个【AndroidManifest.xml】文档,每份【AndroidManifest.xml】文档的开头都会出现这段叙述。而整个【AndroidManifest.xml】文档的叙述,都包含在【manifest】这个主要标签中。

package = "com.demo.android.bmi"

【package】是【manifest】(清单)标签的一个特别属性,范例中的内容可用来标明,这个应用程序的进入点存在于【com.demo.android.bmi】这个命名空间中。

android: versionCode="1"

android: versionName="1.0.0"

【android: versionCode】和【android: versionName】是应用程序版本号。这两个属性是可选的。【android: versionName】是给使用者看的版本号;【android:versionCode】则是开发者用的内部版本号,一般使用流水号。

<application android:icon="@drawable/icon"> …… </application>

【manifest】标签中主要包含一个【application】标签(备注1)。【application】标签里面,定义了所有这个应用程序用到的Activity、服务等信息。【application】标签中的【android:icon】属性,定义了这个应用程序将显示在Android主画面中的应用程序图示。【android:icon="@drawable/icon"】表示应用程序图示的资源存在于【res/drawable/icon】中。图示的大小必须超过64X64pix。

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

【application】标签中所有用到的Activity,都要包含在一个个【activity】标签中(备注2)。Activity是Android应用程序与使用者互动的主要元素,当使用者开启一个应用程序,第一个看到的画面就是一个Activity。若是一个应用程序中包含多个画面时,会定义多个不同的Activity,我们也必须在【application】标签中,使用多个【activity】标签,为不同的Activity添加描述。如果我们已经在程序代码中定义好了Activity,却忘记了在【AndroidManifest.xml】文档中加入对应的【activity】标签,那么在执行中呼叫到这个Activity的时候,将无法开启这个Activity。

【activity】标签的【android:name】属性,指出了这个Activity所对应的类别(class),【android:label】属性,则用来指定这个【activity】的代号。

因为在上一层【Manifest】标签属性中已经定义了【package="com.demo.android.bmi"】,因此在【activity】标签的【android:name】属性中,【.Bmi】代表着【com.demo.android.bmi.Bmi】的简写。也可以写成【Bmi】,一样是代表【com.demo.android.bmi.Bmi】这个类别。

<intent-filter>

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

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

</intent-filter>

【intent-filter】标签定义了这个【activity】的性质。【intent-filter】中主要包含了两个标签:【action】和【category】标签。【action】标签中的【android:name】属性,其内容【android:intent.action.MAIN】表示:这个Activity是此应用程序的进入点(就像程序中常见的main主程序)。常见的还有【android.intent.action.EDIT】等标签。【category】标签中的【android:name】属性,其内容【android.intent.category.LAUNCHER】表示:开启这个应用程序时,应先执行这个Activity。

我们把整个档案合到一起看,可以总结出这个档案所传达的信息:在【com.demo.android.bmi】路径下的【Bmi.java】这个文档中,已经以了一个主要的Activity;当我们打开Android的时候,显示的是位于【res/drawable/icon】的图标。一旦我们按下图示来启动这个应用程序,Dalvik虚拟机会去寻找到定义了【android.intent.category.LAUNCHER】内容的【.Bmi】activity,并呼叫执行。

备注1:

除了【application】标签外,还有【uses-permission】(例如允不允许存取SMS、能否存取联络簿、相机功能等)、【permission】、【instrumentation】等主要标签。

备注2:

除了【activity】标签外,对应于Android应用程序的运作流程,还有【service】、【receiver】、【provider】等主要元素。

Android Manifest相关推荐

  1. Android - Manifest 文件 详解

    Manifest 文件 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/20899281 Manifest可以定义应用程序及其 ...

  2. 安卓(android)建立项目时失败,出现Android Manifest.xml file missing几种解决方法?...

    安卓(android)建立项目时失败,出现AndroidManifest.xml file missing几种解决方法? Eclipse新建项目,遇到这样的问题,注意如下: 1.文件名最好不要用中文. ...

  3. android manifest简介

    每个Android项目都包含一个Manifest文件(Android Manifest.xml),它存储在项目层次中的最顶层.Manifest可以定义应用程序及其组件和需求的结构和元数据.它包含了组成 ...

  4. java 名称可以包含-吗_java – “标签属性名称包含无效字符”. “Android Manifest

    我在 Android Manifest中收到错误"Tag属性名称有无效字符'.",而没有明显无效的字符.这是代码: android:name="Quiz 31" ...

  5. 安卓(android)建立项目时失败,出现Android Manifest.xml file missing几种解决方法?(总结中)

    安卓(android)建立项目时失败,出现Android Manifest.xml file missing几种解决方法?(总结中) 参考文章: (1)安卓(android)建立项目时失败,出现And ...

  6. Android manifest 获取源代码

    /********************************************************************************** Android manifest ...

  7. Android Manifest 权限描述大全

    文章转自:http://www.bejson.com/doc/AndroidManifest/ Android Manifest 权限描述大全 安卓猿可以方便的查看安卓权限描述功能 权限 名称 描述 ...

  8. Android Manifest merger failed with multiple errors参考解决方法

    判断报错类别 Android Manifest merger failed with multiple errors , see logs 主要分为俩类(个人遇见的情况): 与引入的其他库中的Mani ...

  9. Android manifest文件中的标签详细介绍

    Android manifest文件中的标签详细介绍 概要 每一个Android应用都应该包含一个manifest文件,即AndroidManifest.xml.它包含了程序运行的一些必备信息,比如: ...

  10. 深入浅出API——android.Manifest

    最近参加了两个大公司的面试,才发现自己欠缺的真的好多吧,好吧,我承认我是入门级菜鸟,没要达到这些好公司的要求,好公司要的不仅仅是基础,还需要你深入的了解,发现自己的不足,那就努力去改正,坚持每天翻译一 ...

最新文章

  1. 学php还是日语,如何使用PHP检查该词是日语还是英文
  2. (0107)iOS开发之UI实时调试InjectionIII的使用
  3. JDK 11 马上就要来了!JDK 12 还会远吗?
  4. 表白c语言程序设计,C语言编程学习打造表白神器:亲爱的让我们相爱在一起
  5. 简述JQuery,Extjs,YUI,Prototype,Dojo等JS框架的区别和应用场景
  6. Android音频处理 PCM格式
  7. 【云周刊】第205期:阿里云重磅开源实时计算平台Blink,挑战计算领域的“珠峰”...
  8. dw怎么修改html框架的宽度,Dreamweaver (dw)cs6中div标签宽度和高度设置方法
  9. php去掉空格函数 防止注入,PHP_去除php注释和去除空格函数分享,虽然php5中已有php_strip_whitespace - phpStudy...
  10. openapi回调地址请求不通过_必看!OpenAPI知识来了!
  11. HDU4530:小Q系列故事——大笨钟
  12. python物理模拟.pdf_用Python物理建模的第一本书终于来啦
  13. IT基础架构现代化,未来企业的“标配”是什么?
  14. 怎么看matlab程序运行到哪了,MATLAB运行程序时怎么查看还有多久完成
  15. java月份下拉菜单_实现一个日期下拉菜单
  16. FME教程:GIS建筑面转CAD格式JMD,还原房屋建筑结构、层数、地物样式,shp转CAD,GIS转dwg
  17. 【第三方API】顺丰API调用总结-java
  18. 1134. 积木分发
  19. 4 款超级好用的终端文件管理器
  20. “兼职发明家召集令”

热门文章

  1. python100到200的素数_python 100~200的素数和
  2. Linux在当前文件夹下打开终端
  3. 数据建模中的二维表和一维表!
  4. 21Winter\ C语言程序设计第六章
  5. “碎片化时代”的灵动工作与生活
  6. JSON转JS对象,JS对象转JSON
  7. 数据库中间件Mycat介绍详解
  8. 营销自动化如何帮助你挖掘潜在客户?
  9. 热烈祝贺新一代物联网商用平台已入围2019双创标杆项目!
  10. MySQL数据库代理技术