什么是Android应用程序的构成?

Android应用程序的各个组件又是什么?

各个组件和AndroidManifest之间的关系是什么?

Android应用程序由松散耦合的组件组成,并使用应用程序Manifest绑定在一起;应用程序的AndroidManifest.xml文件描述了每个组件和它们之间的交互方式。还用于指定应用程序元数据、其硬件和平台要求、外部库以及必要的权限。

Android应用程序的组件:

Activity:是应用程序的表示层。应用程序中的每一个UI都是通过Activity类的一个或多个扩展实现的。Activity使用Fragment和视图来布局和显示信息,以及响应用户动作。

Service:应用程序中不可见的工作者。Service组件在运行时没有UI,它们可以更新数据源和Activity、触发通知和广播Intent。

Content Provider:一个可共享的持久数据存储器(谈到持久化存储机制,首先想到的是数据库)。Content Provider用来管理和持久化应用程序数据,通常会与SQL数据库交互。它是应用程序之间共享数据的首选方法。(个人认为:该功能更多的是提供数据访问,即是读数据)

Intent:一个强大的应用程序间的消息传递框架。Intent可以用来启动和停止Activity和Service,在系统范围内或向目标Activity、Service或Broadcast Receiver广播消息,以及请求对特定的一条数据执行操作。

Broadcast Receiver:Intent侦听器。Broadcast Receiver使应用程序可以监听到那些匹配指定的过滤标准的Intent广播。Broadcast Receiver会自动启动应用程序来响应某个收到的Intent,这个特点让Broadcast Receiver成为了事件驱动的应用程序的最佳选择。

Widget:通常会被添加到设备主屏幕的可视化应用程序组件。Widget是Broadcast Receiver的特殊变体。(这一点怎么理解?和Broadcast Receiver的关系是什么?Widget有什么功能?)

Notification:该组件允许向用户发送信息,但却不会过分吸引他们的注意力或者打断他们当前的Activity。这种方式是当应用程序不可见或不活动时吸引用户注意的首选方法。

AndroidManifest.xml文件简介:

每个Android应用程序都包含一个Manifest文件——AndroidManifest.xml,该文件存储在项目层次中的最底层。Manifest可以定义应用程序及其组件和需求的结构和元数据。

它包含了组成应用程序的每一个Activity、Service、Content Provider和Broadcast Receiver的节点,并使用Intent Filter和权限来确定这些组件之间以及组件和其他应用程序的交互方式。

该文件还可以指定应用程序的元数据(如:图标、版本号或主题风格)以及额外的顶层节点,这些节点用来指定必需的安全权限和单元测试,以及定义硬件、屏幕和平台支持要求。

特别需要注意的是:使用installLocation属性,指定是否允许(或首选)将应用程序安装到外部存储器而不是内部存储器上。

当把应用程序安装到外部存储器上时,如果用于使用USB大容量存储器想计算机复制文件,或如果用户拒绝或取出SD卡,应用程序将立即终止。上述情况将直接影响到用户体验,以下几类应用程序不适合安装到外部存储设备中:

1. 就有Widget、Live Wallpaper和Live Folder的应用程序;

2. 提供不中断服务的应用程序;

3. 输入法引擎;

4. 设备管理器。

内部存储器的容量一般是有限的,所以最好是只要有可能,就把应用程序安装到外部存储器上。

Manifest.xml文件中都有哪些标签或节点node?

该文件由根节点引导:<manifest...>,该node具有的属性值如下:

可用的节点node有以下几种:

节点node:uses-sdk,用于定义要想正确运行应用程序,设备上必须具有的最低和最高SDK版本,以及为应用程序设计的目标SDK,分别使用minSDKVersion,maxSDKVersion,targetSDKVersion属性设置。

需要注意的是:支持的SDK版本不等同于平台版本,也不能从平台版本导出(SDK--software development toolkit)。

节点uses-configuration:指定应用程序支持的每个输入机制的组合。一般不需要包含这个节点,不过对于需要特殊输入控制的游戏应用程序来说,非常有用。可以配置的属性值有:reqFiveWayNav,reqHardKeyboard,reqKeyboardType,reqNavigation,reqTouchScreen五种。在指定必需的配置时,如果设备不具有任意一种指定配置,则应用程序将不会安装到设备上。

节点uses-feature:指定应用程序需要的硬件功能,可以避免将应用程序安装到不包含必要的硬件功能(如NFC硬件)的设备上。

    <uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera.flash" />
<uses-feature android:name="android.hardware.nfc"/>

包括:音频、蓝牙、摄像头、位置、麦克风、NFC、传感器、电话服务、触摸屏、USB、WIFI等。

节点supports-screens:指定应用程序中布局文件支持的屏幕。

节点uses-permission:声明应用程序需要的权限;在安装应用程序的时候,所有权限都将告诉用户。对很多API和方法调用来说,权限都是必需的,特别是那些需要付费或者有安全问题的服务。

节点permission:应用程序组件创建权限来限制对共享应用程序组件的访问。使用permission标签来创建权限定义。

节点instrumentation:instrumentation类提供一个测试框架,用来在应用程序运行时测试应用程序组件。对于为应用程序创建的每一个测试类,都需要创建一个新的节点。

节点application:一个manifest只能包含一个application节点。该节点使用各种属性来指定应用程序的各种元数据(包括标题、图标和主题)。application节点还可以包含Activity、Service、Content Provider和Broadcast Receiver节点的容器,它包含的这些节点指定了应用程序组件。其中使用android:name属性可以指定自定义Applicatioin类的名称。

应用程序内的每一个Activity都要求有一个activity标签,并使用android:name属性来指定Activity类的名称。此时必须包含核心的启动Activity和其他所有可以显示的Activity。启动任何一个没有在Manifest中定义的Activity时都会抛出一个运行时异常。

其中service、provider、receiver这些标签和activity标签一样,都标记的是应用程序中对应的Service、Content Provider和Broadcast Receiver类。

其中uses-library用于指定该应用程序需要的共享库。可以指定特定的一个包是必需的还是可选的。指定为必需时,在缺少指定库的设备上将无法安装该应用程序。

Android应用程序的结构和解析的更多相关文章

  1. Android应用程序项目结构

    Android应用程序项目结构 [src]:JAVA源代码目录 [gen]:由系统自动生成的JAVA源码文件,不可修改,只可查看和使用 加载的和依赖的类库 [assets]:本地存储文件的一个文件夹 ...

  2. Android开发之 Android应用程序目录结构解析

    建立的HelloWorld的应用项目,其代码是由ADT插件自动生成的,形成Android项目特有的结构框架. 接下来让我带领大家解析一个Android程序的各个组成部分,这次我们拿一个Hello,Wo ...

  3. Android开发:程序目录结构详解

    HelloWorld程序的目录结构概述 我们可以在文件夹中看到,HelloWorld程序的目录主要包括:src文件夹.gen文件夹.Android文件夹.assets.res文件夹. AndroidM ...

  4. 【Android开发】Android应用程序目录结构

    原文:http://android.eoe.cn/topic/summary Android开发之旅:组件生命周期吴秦 Android开发之旅:HelloWorld项目的目录结构 * HelloWor ...

  5. [ Python ] Flask 基于 Web开发 大型程序的结构实例解析

    作为一个编程入门新手,Flask是我接触到的第一个Web框架.想要深入学习,就从<FlaskWeb开发:基于Python的Web应用开发实战>这本书入手,本书由于是翻译过来的中文版,理解起 ...

  6. Android应用程序的结构

    1.src目录 存放该项目的源代码 2.gen目录 该目录文件是ADT自动生成的,并不需要认为地去修改 3.Android2.1 该目录存放的是该项目支持的JAR包,同时还包含项目打包时需要的META ...

  7. Android应用程序结构总结

    Android应用程序结构分析 由于是初学者,对于Android应用程序的结构的认识是一穷二白的,对于开发Android应用程序,必须先了解其程序的结构和作用.一下就用一个简单的例子来解剖: 从上图的 ...

  8. fir.im Weekly - iOS/Android 应用程序架构解析

    假如问你一个iOS or Android app的架构,你会从哪些方面来说呢? 本期 fir.im Weekly 收集了关于  iOS/Android 开发资源,也加入了一些关于 Web 前端方面的分 ...

  9. Android开发之 Android应用程序详细解析

    我们继续的沿用上一篇所建立的应用. Android应用程序可以分为:应用程序源代码(.java),应用程序描述文件(.xml),各种资源. 可以这么理解: 安卓应用程序,通过java代码来实现其业务逻 ...

随机推荐

  1. [C++]类成员返回语句 return *this 的理解

    经常会在类似 copy-assignment 的成员函数看到返回语句 return *this ,这类函数通常返回类型是所属类的引用. 类成员函数的隐式指针 class *this const 经过 ...

  2. react native 安卓home返回键页面刷新

    import { withNavigationFocus } from 'react-navigation'; class Warngreete extends React.Component { c ...

  3. python中opencv的安装

    1.得到opencv的安装包: 2.把安装包中的cv.py, cv2.pd放到一个文件夹中,并把这个文件夹放到D:\Anaconda2\Lib\site-packages中: 3.添加新的变量,变量名 ...

  4. ubuntu工作常用命令及需要留意的点汇总

    这段时间比较忙,先是去北京出差一段时间,然后是福建项目部署上线,领导不愿意招人,只苦了我们下面的人,今天得空,简单汇总下ubuntu服务器部署的常用命令,及日常学习使用感受: 0.书籍买的<循序 ...

  5. ccf 201503-5 最小花费 这题交上去只有10分嗨!求大佬的题解啊

    问题描述 C国共有n个城市.有n-1条双向道路,每条道路连接两个城市,任意两个城市之间能互相到达.小R来到C国旅行,他共规划了m条旅行的路线,第i条旅行路线的起点是si,终点是ti.在旅行过程中,小R ...

  6. class和style属性

    值类型: 1.表达式计算出的字符串结果或者字符串. 2.对象(表达式或者对象名,建议采用对象名) key为className,值的真假控制这个name的有无. //class <div v-bi ...

  7. day 24-1 继承

    继承 什么是继承: 继承是一种创建新类的方式,在 python 中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 父类必须在子类上面 一个类 可以被多个类继承 一个 ...

  8. Angular_上拉刷新

    1.先不做上拉触发,用button模拟一下,触发函数 export class StudyComponent implements OnInit { /*列表数据流 */ list$: Observa ...

  9. AppCan

    启动服务 将app程序寄宿在计算机上,在计算机上调试:访问服务地址,将appToken值复制一下 在浏览器输入192.168.2.102:3000/appToken的值/文件路径后即可调试 入口文件 ...

  10. hihocoder 1176

    hihocoder 1176 题意:N,M.分别表示岛屿数量和木桥数量,一笔画 分析:欧拉路问题(给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,该条路称为欧拉路) 欧拉路的条件 一个无向 ...