应用程序组件是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. labview 调用 matlab script的神坑! Error 1050 occurred at LabVIEW

    显示变量没有被定义,原因是clear 关键字的问题,去掉即可!!! 未找到 文件路径,定位: 文件路径中不能有中文路径

  2. React一些必须要知道的基础

    React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西 ...

  3. Java基础知识之文件操作

    流与文件的操作在编程中经常遇到,与C语言只有单一类型File*即可工作良好不同,Java拥有一个包含各种流类型的流家族,其数量超过60个!当然我们没必要去记住这60多个类或接口以及它们的层次结构,理解 ...

  4. python爬虫框架scrapy初试(二)

    将该导航网站搜索出结果的页面http://www.dmoz.org/Computers/Programming/Languages/Python/Books/里面标题,及标题的超链接和描述爬下来. 使 ...

  5. Android高级开发专题晋升班

    Android高级开发专题晋升班 适用人群:1-3年以上经验的开发者丨学员平均薪酬20K/月

  6. ASP.NET MVC WebApi 返回数据类型序列化控制(json)

    注:本文为个人学习摘录,原文地址:http://www.cnblogs.com/OpenCoder/p/4628557.html 我们都知道在使用WebApi的时候Controller会自动将Acti ...

  7. CODE[VS]-判断浮点数是否相等-浮点数处理-天梯青铜

    题目描述 Description 给出两个浮点数,请你判断这两个浮点数是否相等 输入描述 Input Description 输入仅一行,包含两个浮点数 输出描述 Output Description ...

  8. uinty3d使用ugui封装一个分页控件

    我们在显示数据时有的数据比较多,手机内存有限,我们不可能分配很多的控件来显示这些数据,分页是一个不错的选择.比如玩家交易行.我们现在封装一个自己简单的分页控件来显示玩家交易行. 分页控件的原理其实很简 ...

  9. TCP滑动窗口控制流量的原理

    TCP的滑动窗口机制       TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议.既然是一个可靠的传输协议就需要对数据进行确认.TCP协议里窗口机制有2种:一种是固定的窗口大小 ...

  10. AutoCAD 2009及以上 32位&64位 官方原版下载地址

    AutoCAD 2017 AutoCAD 2017 简体中文版 32位 http://trial2.autodesk.com/NET17SWDLD/2017/ACD/DLM/AutoCAD_2017_ ...