Android应用程序的结构和解析
什么是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应用程序的结构和解析的更多相关文章
- Android应用程序项目结构
Android应用程序项目结构 [src]:JAVA源代码目录 [gen]:由系统自动生成的JAVA源码文件,不可修改,只可查看和使用 加载的和依赖的类库 [assets]:本地存储文件的一个文件夹 ...
- Android开发之 Android应用程序目录结构解析
建立的HelloWorld的应用项目,其代码是由ADT插件自动生成的,形成Android项目特有的结构框架. 接下来让我带领大家解析一个Android程序的各个组成部分,这次我们拿一个Hello,Wo ...
- Android开发:程序目录结构详解
HelloWorld程序的目录结构概述 我们可以在文件夹中看到,HelloWorld程序的目录主要包括:src文件夹.gen文件夹.Android文件夹.assets.res文件夹. AndroidM ...
- 【Android开发】Android应用程序目录结构
原文:http://android.eoe.cn/topic/summary Android开发之旅:组件生命周期吴秦 Android开发之旅:HelloWorld项目的目录结构 * HelloWor ...
- [ Python ] Flask 基于 Web开发 大型程序的结构实例解析
作为一个编程入门新手,Flask是我接触到的第一个Web框架.想要深入学习,就从<FlaskWeb开发:基于Python的Web应用开发实战>这本书入手,本书由于是翻译过来的中文版,理解起 ...
- Android应用程序的结构
1.src目录 存放该项目的源代码 2.gen目录 该目录文件是ADT自动生成的,并不需要认为地去修改 3.Android2.1 该目录存放的是该项目支持的JAR包,同时还包含项目打包时需要的META ...
- Android应用程序结构总结
Android应用程序结构分析 由于是初学者,对于Android应用程序的结构的认识是一穷二白的,对于开发Android应用程序,必须先了解其程序的结构和作用.一下就用一个简单的例子来解剖: 从上图的 ...
- fir.im Weekly - iOS/Android 应用程序架构解析
假如问你一个iOS or Android app的架构,你会从哪些方面来说呢? 本期 fir.im Weekly 收集了关于 iOS/Android 开发资源,也加入了一些关于 Web 前端方面的分 ...
- Android开发之 Android应用程序详细解析
我们继续的沿用上一篇所建立的应用. Android应用程序可以分为:应用程序源代码(.java),应用程序描述文件(.xml),各种资源. 可以这么理解: 安卓应用程序,通过java代码来实现其业务逻 ...
随机推荐
- 开源顶级持久层框架——mybatis(ibatis)——day02
mybatis第二天 高级映射 查询缓存 和spring整合 课程复习: mybatis是什么? mybatis是一个持久层框架,mybatis ...
- Springboot自定义异常处理
1.自定义异常类 import lombok.Data; @Data public class UserException extends RuntimeException { private Lon ...
- springMVC中数据流解析与装载
最近在看springmvc原理时,看到一篇比较赞的博文,留存学习,如果侵权,请告知,立删. 地址: https://my.oschina.net/lichhao/blog/172562
- css3新单位vw、vh、vmin、vmax的使用详解(转载)
文章传送门: https://blog.csdn.net/ZNYSYS520/article/details/76053961
- 关于shell变量的继承总结
结论: 默认,父shell和子shell的变量是隔离的. sh方式运行脚本,会重新开启一个子shell,无法继承父进程的普通变量,能继承父进程export的全局变量. source或者. 方式运行脚本 ...
- vivado中如何使用chipscope
如何使用chipscope 参考: https://www.cnblogs.com/liujinggang/p/9813863.html Xilinx FPGA开发实用教程---徐文波 田耘 1.Ch ...
- 【转】web.xml中的contextConfigLocation在spring中的作用
一.spring中如何使用多个xml配置文件 1.在web.xml中定义contextConfigLocation参数,Spring会使用这个参数去加载所有逗号分隔的xml文件,如果没有这个参数,sp ...
- XAMARIN 安卓程序闪退问题
参考:https://forums.xamarin.com/discussion/25780/unfortunately-app-name-has-stopped 在VS 2017中使用Xamarin ...
- Gitlab_ansible_jenkins三剑客⑥Jenkins和ansible集成
ip 角色 备注 10.11.0.215 jenkins服务器 通过deploy运行jenkins服务,deploy用户做了免秘钥登录ansible服务器 10.11.0.210 ansible服务器 ...
- Linux apache的运行用户和用户组
我们在安装apache后,有时在上传文件的时候,提示没有权限或者是不可写,我们都会去查文件夹的权限. 通过ls -l /var/www/html/website可以很直观的看出我们文件和文件夹的权限, ...