Android四大基本组件分别是Activity,Content Provider内容提供者,Service服务,BroadcastReceiver广播接收器。
其中Activity和Content Provider在前面都有介绍过。这里主要讲讲Service服务和BroadcastReceiver广播接收器。
一、Services(服务)
1、简述
Services(服务)简单来说就是剥夺界面的Activity。它和Activity很多概念都是相似的,都是封装有一个完整的功能逻辑实现。
Services是运行在后台的一段代码,它可以运行在它自己的进程,也可以运行在其他应用程序进程的上下文(context)里面,
其它的组件可以绑定到一个服务(Service)上面,通过远程过程调用(RPC)来调用这个方法。常见的Services如后台音乐播放,
后台计算数据。
2、运行原理
有两种运行方式,原理如下:
a、使用Context.startService()来启动一个Service,从而可以在后台调用Service。同时,系统也将保持这个Service一直执行,
直到这个Service运行结束。
b、使用Context.bindService()方法,连接到一个Service上(如果这个Service还没有运行将启动它)。当连接到一个Service之后,
我们还可以Service提供的接口与它进行通讯。
3、生命周期
官方生命周期的图示:
a、startService后,即使调用startService的进程结束了,Service仍然还存在,直到有进程调用stopService,或者Service自己自杀(stopSelf())。
b、bindService后,Service就和调用bindService的进程同生共死了,也就是说当调用bindService的进程死了,那么它bind的Service也要跟着被结束,
当然期间也可以调用unbindservice让 Service结束。
c、两种方式混合使用时,比如说你startService了,我bindService了,那么只有你stopService了而且我也unbindservice了,这个Service才会被结束。
4、使用步骤
a、继承service类(一般用它的子类IntentService)
b、AndroidManifast.xml配置清单文件中<application>节点里对服务进行配置
<service name=".SMSService"/>
c、服务不能自己运行,需要通过Contex.startService()或Contex.bindService()启动服务
通过startService()方法启动的服务于调用者没有关系,即使调用者关闭了,服务仍然运行想停止服务要调用Context.stopService(),
此时系统会调用onDestory(),使用此方法启动时,服务首次启动系统先调用服务的onCreate()-->onStart(),如果服务已经启动再次调用只会触发onStart()方法
使用bindService()启动的服务与调用者绑定,只要调用者关闭服务就终止,使用此方法启动时,服务首次启动系统先调用服务的onCreate()-->onBind(),
如果服务已经启动再次调用不会再触发这2个方法,调用者退出时系统会调用服务的onUnbind()-->onDestory(),想主动解除绑定可使用Contex.unbindService(),
系统依次调用onUnbind()-->onDestory();
5、运行实例
写个后台播放音乐的例子,点击'start'按钮调用Service播放音乐,点击'stop'按钮停止Service停止音乐。
MyServices代码:
2
3 private static final String TAG = "MyService";
4 MediaPlayer player;
5
6 @Override
7 public IBinder onBind(Intent intent) {
8 return null;
9 }
10
11 @Override
12 public void onCreate() {
13 Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
14 Log.v(TAG, "onCreate");
15
16 player = MediaPlayer.create(this, R.raw.ten_year);//运行例子是,需要替换音乐的名称
17 player.setLooping(false); // Set looping
18 }
19
20 @Override
21 public void onDestroy() {
22 Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
23 Log.v(TAG, "onDestroy");
24 player.stop();
25 }
26
27 @Override
28 public void onStart(Intent intent, int startid) {
29 Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
30 Log.v(TAG, "onStart");
31 player.start();
32 }
33
34 }
调用、停止服务:
2 stopService(new Intent(this, MyService.class));
最后别忘了AndroidManifast.xml里声明服务:
BroadcastReceiver广播接收器放在下一篇介绍吧!
本文链接:http://www.cnblogs.com/aiguozhe/p/3617215.html,转载请注明。
1. 现实世界
现实世界是存在于人们头脑之外的客观世界,是客观事物及其互相的联系。例如学校教学管理中涉及的学生管理、教师管理、课程管理。管理者要求:每个学期开学时制作学生选修课程情况表,内容包括学号、姓名、课程名、选修课类别(类别分为必修、选修);每个学期结束时制作学生选修课程成绩表,内容包括学号、姓名、课程名、选修课的类别、总评成绩;制作教师授课安排表,内容包括教师号、教师名,课程名,授课类别(授课类别分为主讲、辅导、实验)、学时数、班级数等。这就是现实世界,是数据库设计者接触到的最原始的数据,数据库设计者对这些原始数据进行综合、抽象成为数据库技术所能处理的数据。对现实世界的数据描述,就成为信息世界。
2. 信息世界
信息世界是现实世界的符号描述,即将客观世界用数据来描述。例如,学生是客观世界的个体,可以用一组数据(学号、姓名、性别、年龄、班级、成绩)来描述,有这样一组数据不见其人便可以了解该学生的基本情况。因此可以说信息世界就是我们所说的数据世界。信息世界中的术语包括:
(1) 实体。客观世界存在的、可以区别的事物称为实体。实体可以是具体的事物,例如学生李,教师张、数学课,也可以是抽象的事件,例如:本学期学生李选修了哪些课程,教师张教授了哪门课程,读者的一次借阅活动等。
(2) 属性。实体有很多特性,每个特性称为实体的一个属性,每个属性有一个类型。例如学生实体的属性有:学号、姓名、性别、年龄、班级、成绩,其中学号、姓名、班级的类型为字符型,性别的类型为逻辑型,年龄的类型为整型。
(3) 实体集。性质相同的实体的集合。例如全体学生的集合,全体教师集合等。
(4) 实体标识符。能够唯一标识实体的属性或属性的集合。如学生实体的属性:学号,能够唯一确定一个学生,因此可以作为学生实体集的标识符。
3. 机器世界
信息世界中的数据在机器世界中的存储,成为计算机的数据。机器世界中对数据的描述采用数据库技术的专业术语,对应于信息世界的术语有以下四个专业术语:
(1) 记录。对应于信息世界中的每一个实体的数据。例如学生这一实体的一组数据(20100301001,孤傲苍狼,男,20,计算机0901,87)就是一条记录
(2) 字段,对应于信息世界中的属性,在数据库技术中称为字段,学生实体中学号、姓名、性别、班级、成绩都是字段,每个字段都有它的类型、取值范围,字段的取值范围称为字段的域。
(3) 数据文件。对应于信息世界的实体集。由若干个相同类型记录组成的数据集合,在数据库系统中以文件(二维表)的形式存放。
(4) 关键字。能够唯一标识记录的字段或字段表达式,与信息世界中的实体标识符相对应,例如学生实体中的学号可以作为学生的关键字。
从客观世界到信息世界不是简单的数据描述,而是从客观世界中抽象出适合数据库技术研究的数据。同时要求这些数据能够很好地反映客观世界的事物;从信息世界到机器世界也不再是简单的数据对应存储,而是要设计数据的逻辑结构和物理存储结构。所谓数据的逻辑结构是指程序员或用户用以操作的数据形式,数据的逻辑结构是数据本身所具有的特性,是现实世界的抽象;所谓数据的物理结构是实际存储在存储设备上的数据。
在数据库系统中,数据的逻辑结构于数据的物理结构之间可以差别很大,数据的逻辑结构面向程序员,数据的物理结构面向机器。数据库管理软件的功能之一,就是要能够把数据的逻辑结构映像为数据的物理结构,把数据的物理结构映像为数据的逻辑结构。
本文链接:http://www.cnblogs.com/xdp-gacl/p/3617173.html,转载请注明。
没有评论:
发表评论