2014年3月21日星期五

android学习日记19--四大组件之Services(服务) - aiguozhe1991

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
android学习日记19--四大组件之Services(服务) - aiguozhe1991  阅读原文»

  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代码:

1 public class MyService extends Service {
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 }

调用、停止服务:

1 startService(new Intent(this, MyService.class));
2 stopService(new Intent(this, MyService.class));

最后别忘了AndroidManifast.xml里声明服务:

1 <service android:enabled="true" android:name=".MyService" />

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,转载请注明。

阅读更多内容

没有评论:

发表评论