Android的组件
android组件是是一个android APP所必需的构建模块,而每个组件都是系统进入你的app的入口,并不是所有的组件对用户来说都是入口,还有一些依靠着彼此,但是每一个对于它自己来说都是一个入口,扮演着一个特别的作用,那就是在你的应用的所有功能行为中都是一个独一无二的构建模块。
在android中一共有四种组件,每一种组件扮演着一个独一无二的角色,这个组件从构建到消亡有着自己独特的生命周期.
这四种组件分别是Activity、Services、Content providers、Broadcast receivers:
Activity:一个activity代表这一个用户界面,例如,一个email App可能有一个展示所有email列表的界面,一个写邮件的界面,一个读邮件的界面。尽管在一个email App中所有的界面工作在一起组成了用户体验,但是应用中的每一个界面都是对立存在的,就像另一个app能够启动这个app的任何一个界面(当然如果这个email app允许的话)。
Service:service是一个主要用于长时间后台运行或者远程工作的组件,而它对于用户是不可见的。例如,一个service可以在用户进行其他操作时在后台播放音乐,或者在不阻塞用户体验的情况下下载数据。其他的组件,像Activity能够开启一个service,和它运行、绑定在一起。
Content providers:Content providers负责管理一套app的数据集合。你能够把数据存储在任何你的app可以访问的文件系统、数据库、web、和其他可以固态存储数据的地方。通过这个Content providers,其他的app能够查询到,甚至于可以修改这些数据(在这个Content providers允许的情况下)。例如,android系统提供了一个可以管理用户联系人信息的Content provider去读取指定联系人。当然了,Content providers也可以用来保存一些对于app自己私有的信息。
Broadcast receiver:Broadcast receiver是一个用来相应系统级别的广播。许多广播产生于这个系统——例如屏幕关闭,电量低,拍照,等;APP也可以发起广播,例如让其他app知道下载了数据,并且是可以用的对他们来说。虽然broadcast也无法提供一个可交互的用户界面,当时它可以创建一个状态通知栏当broadcast发生的时候。大部分情况,我们通常把broadcast reciver作为和其他应用交互的一种途径,被用于做一些少量工作的任务。
Android系统设计的最奇妙的一点是一个应用可以调用其他应用,例如在需要拍照的时候我们调用系统的照相机就能使用照相机,甚至于不用包含这个功能的代码或者连接到这些代码,而不需要进行开发。而对于用户来讲这个相机就像是你的应用的一部分。
当这个系统启动一个组件的时候,系统开始这个进程,初始化这个组件所需的类。例如,当你的应用调用一个照相机的时候,这个照相机所属的activity运行的进行是在照相机所在的进程中,而不是在你的app的进程中。而且,不同与其他系统的app,android app没有一个单独的入口(没有main方法)。
因为系统运行在一个各自独立不允许其他app访问的文件系统中,你的app对于其他app的组件是不可访问的。因此,如果你想要访问其他app,你必须向其他app发送一个intent消息来启动一个特定的组件,然后系统开发这个组件对你。
组件间的调用:
这四种组件中的其中三种——acitivity、services、broadcast reciever能够被称为Intent的异步消息机制调用。在运行的时候这些相互独立的组件能够通过Intent相互调用(你可以把INTENT看成一个能够向其他组件请求某种动作的消息机制),不论这些组件是属于你的app还是其他app的。
一个Intent被一个成为Intent的对象调用,这个对象定义了一个用来调用一个指定的组件或者一个指定类型的组件。
对于activity和service来说,intent定义了一个要进行的行为和要表现的数据。例如,一个Intent对于activity来说可能被定义去展示一张图片或者打开一个网页。在某些情况下,你能开启一个activity,并且返回结果,在这个时候,这个activity以intent的方式返回结果(例如,你发起一个intent让用户选择一个联系人,并且返回给你——返回一个包含指向这个联系人的URL的Intent)。
而对于Broadcast Reciver来说,这个Intent仅仅简单的定义了被广播的消息(例如一则包含设备电量低的广播仅仅包含了一条可见的‘电量低’的字符串)。
但是,其他的组件——Content Provider 是不能被Intent 调用的。相反,他被一个ContentResolver
的请求所调用,这个content resolver控制这所有的指向这个Content Provider的事物,以至于这个表现事物的组件不需要调用,相反调用这个content resolver对象的方法。
以下是这几种组件的调用方式:
1、你能通过向startActivity或者startActivityForResult方法传递一个Intent来启动一个Activity;
2、你能通过传递一个Intent给startService方法来启动一个service,或者你能通过传递一个Intent给bindService方法来绑定到一个service;
3、你能发起一则广播通过向这些方法——sendBroadcast()、sendOrderedBroadcast()、sendStickyBroadcast() 传递一个Intent;
4、你能进行查询依靠调用ContentResover的query()。