Android应用程序组件介绍
应用程序组件是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应用程序组件介绍的更多相关文章
- Android控件介绍
1. 介绍 Android控件大多位于android.widget, android.view.View为他们的父类对于Dialog系列, android.app.Dialog为父类 Android的 ...
- Android应用程序组件之间的通信Intent和IntentFilter
Android应用程序的基本组件,这些基本组建除了Content Provider之外,几乎全部都是依靠Intent对象来激活和通信的. 下面介绍Intent类,并通过例子来说明Intent一般用法 ...
- Android自定义控件1--自定义控件介绍
Android控件基本介绍 Android本身提供了很多控件比如我们常用的有文本控件TextView和EditText:按钮控件Button和ImageButton状态开关按钮ToggleButton ...
- android xml 常用控件介绍
android常用控件介绍 ------文本框(TextView) ------列表(ListView) ------提示(Toast) ------编辑框(EditText) ...
- Android support library支持包常用控件介绍(二)
谷歌官方推出Material Design 设计理念已经有段时间了,为支持更方便的实现 Material Design设计效果,官方给出了Android support design library ...
- 我的Android第三章:Android的组件介绍
小编摘录了Android文档介绍Android四大组件的基本内容,感觉文档的内容写的很详细所以小编将它写入了博客 Android 使用Java语言开发.Android SDK 工具编译代码-以及任意数 ...
- GitHub上排名前100的Android开源库介绍(来自github)
本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍,至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果,然后过滤了 ...
- 6、二、App Components(应用程序组件):1、Intents and Intent Filters(意图和意图过滤器)
1.Intents and Intent Filters(意图和意图过滤器) 1.0.Intents and Intent Filters(意图和意图过滤器) An Intent is a messa ...
- 5、二、App Components(应用程序组件):0、概述
二.App Components(应用程序组件) 0.概述 App Components Android's application framework lets you create rich ...
随机推荐
- php_Symfony_项目实战全过程记录
今天是2017年1月8号,正式接收到一个Symfony 的项目,准备全程记录遇到的问题及解决方法,之前被通知学习该框架,只是一直没有机会做项目,今天终于可以做了,希望2017把Symfony学的能会使 ...
- js getByClass函数封装
function getByClass(oParent, sClass) { var aEle=oParent.getElementsByTagName('*'); var aResult=[]; v ...
- cmd 快捷操作
鼠标右键命令行快捷方式设置 将下面的文本存成CommandPrompt.reg 文件,然后双击导入到注册表即可 Windows Registry Editor Version 5.00 [HKEY_C ...
- C# 图形普通处理,resize ,水印..
网站中,对用户图片上传处理是很有必要的.对于一些常用的处理,对图片各种形式的压缩,各种形式的水印. 1.裁剪正方形头像方法 /// <summary> /// 正方型裁剪 /// 以图片中 ...
- schemes-universalLink-share_IOS-android-WeChat-chunleiDemo
schemes-universalLink-share_IOS-android-WeChat-chunleiDemo The mobile terminal share page start APP ...
- Canvas裁剪和Region、RegionIterator
主要是看这边文章学习:http://blog.csdn.net/lonelyroamer/article/details/8349601 Region.op参数 DIFFERENCE(0), //最终 ...
- Openjudge-NOI题库-字符串移位包含问题
题目描述 Description 对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串. 给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次 ...
- PQ分区魔术师v9.0 中文版
软件名称: pqmagic 硬盘分区大师9.0中文绿色版 软件大小:5.80MB 软件语言:简体中文 软件类别:磁盘工具 软件授权:免费软件 更新时间:2013-10-082013-10-08 09: ...
- ABP组件包升级
对于abp的爱好者来说在使用abp上会面临两个问题,第一个是如何上手,第二是如何升级,然而们今天的主题是如何升级abp的组件包.目前我项目版本是0.8.2 通过官网boilerplate生成的项目前端 ...
- 微信小程序 textarea 简易解决方案
微信小程序中textarea没有bindchange事件,所以无法在输入时给变量赋值. 虽然可以使用bindblur事件,但是绑定bindblur事件,如果再点击按钮,则先执行完按钮事件后,再去执行b ...