应用程序组件是Android应用程序的基本构建单元。每个组件是系统进入你的应用程序的不同入口点。不是所有的组件对于用户都是实际上的入口点,有些是互相依赖的,但是每个组件都有特定的作用——每个都是唯一的构建单元,这些构建单元定义你应用程序的全部行为

有四种不同类型的应用程序组件。每种都有不同的用处并且有不同的生命周期。生命周期定义了他们是怎样被创建和销毁的。

四类不同的应用程序组件分别有:

Activities

一个Activity代表一个单独的拥有用户界面的屏幕。比如,一个邮件应用程序可能拥有一个显示新邮件的列表的Activity,一个编写邮件的Activity,一个读邮件的Activity。虽然这些Activity一起工作,但是他们是相互独立的。因此一个不同的应用程序也可以启动这些Activity中的任何一个(如果邮件应用程序允许的话)。比如一个摄像头应用程序为了能让用户分享一张图片它能启动邮件应用程序中的编写邮件的Activity。

一个Activity是由Activity类的子类来实现的。

Services

一个Service组件是运行在后台的一个进程,这个进程处理一个长时间的操作或者是一个远程调用。一个Service不需要提供一个用户界面。比如,一个Service可以在用户运行一个不同程序的同时在后台播放音乐,或者在不阻塞一个Activity的用户界面的同时获取网络数据。其他的组件,比如一个Activity,可以启动一个Service并且与之交互。

一个Service是由Service的子类来实现的。

Content providers

一个Content provider管理一组共享的应用程序数据。你可以把这些数据存储到文件系统、一SQLite数据库、互联网或者任何你的应用程序可以访问的持久化存储设备中。通过Content provider其他的应用程序能够查询甚至修改(如果Content provider允许修改操作)这些数据。例如Android系统提供了管理联系人信息的Content provider。因此,任何一个应用程序在拥有相应权限的情况下都可以访问这个Content provider管理的数据(比如ContactsContract.Data)来读取或者修改某个联系人的信息。

Content provider用于管理应用程序不与其他程序共享的的私有数据也是非常有用的。不如Note Pad例子程序就使用了一个Content provider来存储数据。

一个Content Provider是由ContentProvider的子类来实现的,并且必须实现一组使其他应用程序能与之通信的API。更多信息请参照Content Providers开发者指南。

Broadcast receivers

一个Broadcast receiver组件用于响应整个系统的广播通知。大量的广播都是由系统产生的。例如屏幕关闭的广播,电量不足的广播,拍了一张相片的广播。应用程序也可以发出广播,例如让其他应用程序知道一些数据已从网上下载了,并且它们可以使用这些数据。虽然broadcast receiver不显示用户界面,但是当广播事件发生的时候他们可以创建一个状态栏通知来提示用户。更加普遍的情况是,一个Broadcast receiver只是一扇通向其他组件的“大门”,它只做非常少量的工作。例如它可以基于一个广播事件启动一个Service来完成一些工作。

一个Broadcast receiver是由BroadcastReceiver的子类来实现的,并且每个广播都是当作一个Intent对象来传递的。

Android系统的一个独一无二的设计就是一个应用程序可以启动其它应用程序的组件。例如如果你希望用户通过摄像头来拍摄一张照片,而其他应用程序已经实现了这个功能,那么你的应用程序可以直接使用它,而不是自己开发一个Activity来实现这一功能。你不需要通过合并或者事件链接到摄像头应用程序的代码,而是直接启动摄像头应用程序实现拍照功能的Activity。当拍照完成时,照片功过事件返回到你的应用程序中。对于用户来说,看起来拍照功能就是你的应用程序的一部分。

当系统启动一个组件的时候,它为应用程序开启一个进程(如果应用程序还没有运行),并且实例化这个组件需要的所有的类。例如,如果你的应用程序启动一个摄像头应用程序中实现拍照功能的Activity,这个Activity运行在属于摄像头应用程序的进程中,而不是你的应用程序的进程中。因此,和其它大多数操作系统不一样,Android应用程序不止一个单独的入口。(例如,没有main函数)

因为每个应用程序运行在独立的进程中,并且每个进程都有文件权限来限制其它程序的访问,你的应用程序不能直接启动其它应用程序的组件。尽管如此,Android系统可以启动它们。因此,你必须传递一个消息给Android系统,这个消息定义了你想启动某个组件的意图,Android系统接收到这个消息后为你启动其他应用程序的组件。

启动组件

四种组件中的三种——Activity、Service和Broadcast receiver——通过被称作Intent的异步消息启动。Intent在运行时把独立的组件互相绑定(你可以认为Intent是组件为了请求一个操作派出的信使),不管这个组件是属于你的应用程序还是他的应用程序。

一个Intent对象创建一个Intent,它定义了一个启动某个或者某种组件的消息。一个Intent的意图分别可以是明确的,也可以是含蓄的。

对于Activity和Service来说,一个Intent定义了一个行为(例如,“展示”或者“发送”一些东西)和指定相关的数据的URI(其中包括启动组件可能需要知道的数据)。例如,一个Intent可能传递一个Activity的请求来显示一张图片或者打开一个网页。在某些情况下,你能够启动一个Activity来接收Intent中的数据,这个Activity也返回一个数据包含在Intent中(例如,你发布了一个Intent让用户选取一个联系人信息,并且返回给你,返回的Intent中包含了指向选取的联系人信息的URI)。

对于Broadcast receiver来说,Intent只是简单地定义了被广播的公告(例如一个显示设备电池电量低的广播只包括一个指出“电量低”的操作字符串)。

其他类型的组件,Content provider,不是由Intent来启动,而是在ContentResolver向它发出一个请求时被启动。Content resolver处理所有与Content provider的直接相关的事务,因此组件不需要直接与Content provider通信,替而代之调用ContentResolver对象的方法。这样在Content provider和组件请求信息之间保留了一个抽象层(为了安全)。

启动每种组件都有不同的方法:

l 你可以通过传递一个Intent对象到startActivity()或者startActivityForResult()(当你希望这个Activity返回结果时)方法来启动一个Activity。

l 你可以通过传递一个Intent对象到startService()方法来启动一个Service(或者传递新的指令到正在运行的Service)。或者你可以通过传递一个Intent对象到bindService()来绑定到Service。

l 你可以通过传递一个Intent对象到sendBroadcast(),sendOrderedBroadcast()或者sendStickyBroadcast()方法来发布一个广播。

l 你可以通过调用ContentResolver对象上的query()方法来对一个Content provider执行查询操作。

Android应用程序组件介绍的更多相关文章

  1. Android控件介绍

    1. 介绍 Android控件大多位于android.widget, android.view.View为他们的父类对于Dialog系列, android.app.Dialog为父类 Android的 ...

  2. Android应用程序组件之间的通信Intent和IntentFilter

    Android应用程序的基本组件,这些基本组建除了Content Provider之外,几乎全部都是依靠Intent对象来激活和通信的. 下面介绍Intent类,并通过例子来说明Intent一般用法 ...

  3. Android自定义控件1--自定义控件介绍

    Android控件基本介绍 Android本身提供了很多控件比如我们常用的有文本控件TextView和EditText:按钮控件Button和ImageButton状态开关按钮ToggleButton ...

  4. android xml 常用控件介绍

    android常用控件介绍 ------文本框(TextView)     ------列表(ListView)     ------提示(Toast)     ------编辑框(EditText) ...

  5. Android support library支持包常用控件介绍(二)

    谷歌官方推出Material Design 设计理念已经有段时间了,为支持更方便的实现 Material Design设计效果,官方给出了Android support design library ...

  6. 我的Android第三章:Android的组件介绍

    小编摘录了Android文档介绍Android四大组件的基本内容,感觉文档的内容写的很详细所以小编将它写入了博客 Android 使用Java语言开发.Android SDK 工具编译代码-以及任意数 ...

  7. GitHub上排名前100的Android开源库介绍(来自github)

    本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍,至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果,然后过滤了 ...

  8. 6、二、App Components(应用程序组件):1、Intents and Intent Filters(意图和意图过滤器)

    1.Intents and Intent Filters(意图和意图过滤器) 1.0.Intents and Intent Filters(意图和意图过滤器) An Intent is a messa ...

  9. 5、二、App Components(应用程序组件):0、概述

    二.App Components(应用程序组件) 0.概述   App Components Android's application framework lets you create rich ...

随机推荐

  1. jQuery插件slides实现无缝轮播图特效

    初始化插件: slides是一款基于jQuery无缝轮播图插件,支持图内元素动画,可以自定义动画类型 1 2 3 4 5 6 7 8 9 10 $(".slideInner").s ...

  2. RHEL账号总结一:账号的分类

    账号是一种用来记录单个用户或者多个用户的数据.RHEL中每一个合法的用户都必须拥有账号,才能使用RHEL. 在RHEL上的账号可以分为两类: 用户账号:用来存储单一用户的数据,你也可以使用一个用户账号 ...

  3. 无线网卡连接internet,有线网卡向另一台电脑分享网络(笔记本当有线路由器)

    有一台笔记本和一台台式机,都放在卧室内 笔记本能用无线网卡连接到客厅的路由器,台式机没有配备无线网卡,不能上网 要从客厅的路由器那边拉一条网线到卧室内连接台式机显然很蠢,在卧室内购置一台中继路由器也不 ...

  4. javascript:;”是什么意思

    就是 执行一段 空白JAVASCRIPT语句 并且返回的也是空或者false值..把 javascript:; 加在超级链接上 就可以防止 链接跳转..从而 可以给 链接的 onclick 方法上 写 ...

  5. VUGEN错误处理函数--lr-continue-on-error

    void lr-continue-on-error(int value);value是脚本运行出错时的取值,具体取值与相应值得含义如下表,在具体使用时,可以取常量名或者常量值代表. 1.设置,选择co ...

  6. 用R语言 做回归分析

    使用R做回归分析整体上是比较常规的一类数据分析内容,下面我们具体的了解用R语言做回归分析的过程. 首先,我们先构造一个分析的数据集 x<-data.frame(y=c(102,115,124,1 ...

  7. JavaEE XML XPath

    JavaEE XML XPath @author ixenos XPath技术 1 引入 问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!!需要遍历DOM树的众多节点 ...

  8. nginx 配置访问限制

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...

  9. Vultr新加坡机房速度怎么样?值得购买吗?最新评测!

    2016年9月,Vultr vps开通了新加坡Singapore机房线路.与知名的竞争对手Digitalocean和Linode一样,新加坡机房对亚洲速度友好,是讨用户欢心的一个进步. 但是,vult ...

  10. 动作Action

    /** * DelayTime延迟 * @param d Duration 延迟时间 */ auto delayTime = DelayTime::create(); sprite->runAc ...