android服务的应用,Android学习指南之十四:Service详解及应用实例

上一节讲到了Gallery画廊,本节主要讲解Android组件Service,主要内容包括:Service的概念、生命周期及其应用实例。

一、Service简介

Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,只不过它没有UI界面,是在后台运行的组件。

dc3d5bc6638554bea7766dea137a747b.gif

二、Service的生命周期

Service对象不能自己启动,需要通过某个Activity、Service或者其他Context对象来启动。启动的方法有两种,Context.startService和Context.bindService()。两种方式的生命周期是不同的,具体如下所示。

Context.startService方式的生命周期:

启动时,startService –> onCreate() –> onStart()

停止时,stopService –> onDestroy()

Context.bindService方式的生命周期:

绑定时,bindService  -> onCreate() –> onBind()

解绑定时,unbindService –>onUnbind() –> onDestory()

三、Service应用实例:控制音乐播放的Service

下面我们用一个可以控制在后台播放音乐的例子来演示刚才所学知识,同学们可以通过该例子可以明显看到通过绑定方式运行的Service在绑定对象被销毁后也被销毁了。

f8e64f48f81796287c27f7557815c2c3.gif

下面是编写该实例的步骤:

1、建立一个新项目名字叫Lesson14_HelloService,Activity起名叫MainHelloService.java。

2、res/layout/main.xml中代码如下:

XML/HTML代码<?xmlversion ="1.0"encoding="utf-8"?>

3、在res目录中建立一个raw目录,并把一个音乐文件babayetu.mp3拷贝进来。

4、在Activity的同目录新建一个service文件MusicService.java。

Java代码packageandroid.basic.lesson14;

importandroid.app.Service;

importandroid.content.Intent;

importandroid.media.MediaPlayer;

importandroid.os.IBinder;

importandroid.util.Log;

importandroid.widget.Toast;

publicclassMusicServiceextendsService {

//为日志工具设置标签

String tag ="MusicService";

//定义音乐播放器变量

MediaPlayer mPlayer;

//其他对象通过bindService方法通知该Service时该方法会被调用

@Override

publicIBinder onBind(Intent intent) {

Toast.makeText(this,"MusicService onBind()",Toast.LENGTH_SHORT).show();

Log.i(tag,"MusicService onBind()");

mPlayer.start();

returnnull;

}

//其他对象通过unbindService方法通知该Service时该方法会被调用

@Override

publicbooleanonUnbind(Intent intent){

Toast.makeText(this,"MusicService onUnbind()", Toast.LENGTH_SHORT).show();

Log.i(tag,"MusicService onUnbind()");

mPlayer.stop();

returnfalse;

}

//该服务不存在需要被创建时被调用,不管startService()还是bindService()都会在启动时调用该方法

@Override

publicvoidonCreate(){

Toast.makeText(this,"MusicService onCreate()", Toast.LENGTH_SHORT).show();

//创建一个音乐播放器对象

mPlayer=MediaPlayer.create(getApplicationContext(), R.raw.babayetu);

//设置可以重复播放

mPlayer.setLooping(true);

Log.i(tag,"MusicService onCreate()");

}

//用startService方法调用该服务时,在onCreate()方法调用之后,会调用改方法

@Override

publicvoidonStart(Intent intent,intstartid){

Toast.makeText(this,"MusicService onStart",Toast.LENGTH_SHORT).show();

Log.i(tag,"MusicService onStart()");

mPlayer.start();

}

//该服务被销毁时调用该方法

@Override

publicvoidonDestroy(){

Toast.makeText(this,"MusicService onDestroy()", Toast.LENGTH_SHORT).show();

mPlayer.stop();

Log.i(tag,"MusicService onDestroy()");

}

}

5、MainHelloService.java中的代码:

Java代码packageandroid.basic.lesson14;

importandroid.app.Activity;

importandroid.content.ComponentName;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.content.ServiceConnection;

importandroid.os.Bundle;

importandroid.os.IBinder;

importandroid.util.Log;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.Toast;

publicclassMainHelloServiceextendsActivity {

//为日志工具设置标签

String tag ="MusicService";

/** Called when the activity is first created. */

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//输出Toast消息和日志记录

Toast.makeText(MainHelloService.this,"MainHelloService onCreate", Toast.LENGTH_SHORT).show();

Log.i(tag,"MainHelloService onCreate");

//定义组件对象

Button b1= (Button)findViewById(R.id.Button01);

Button b2= (Button)findViewById(R.id.Button02);

Button b3= (Button)findViewById(R.id.Button03);

Button b4= (Button)findViewById(R.id.Button04);

//定义服务链接对象

finalServiceConnection conn =newServiceConnection(){

@Override

publicvoidonServiceConnected(ComponentName name, IBinder service) {

Toast.makeText(MainHelloService.this,"ServiceConnection onServiceConnected", Toast.LENGTH_SHORT).show();

Log.i(tag,"ServiceConnection onServiceConnected");

}

@Override

publicvoidonServiceDisconnected(ComponentName name) {

Toast.makeText(MainHelloService.this,"ServiceConnection onServiceDisconnected", Toast.LENGTH_SHORT).show();

Log.i(tag,"ServiceConnection onServiceDisconnected");

}};

//定义点击监听器

OnClickListener ocl=newOnClickListener(){

@Override

publicvoidonClick(View v) {

//显示指定intent所指的对象是个Service

Intent intent =newIntent(MainHelloService.this,android.basic.lesson14.MusicService.class);

switch(v.getId()){

caseR.id.Button01:

//开始服务

startService(intent);

break;

caseR.id.Button02:

//停止服务

stopService(intent);

break;

caseR.id.Button03:

//绑定服务

bindService(intent,conn,Context.BIND_AUTO_CREATE);

break;

caseR.id.Button04:

//解除绑定

unbindService(conn);

break;

}

}

};

//绑定点击监听器

b1.setOnClickListener(ocl);

b2.setOnClickListener(ocl);

b3.setOnClickListener(ocl);

b4.setOnClickListener(ocl);

}

@Override

publicvoidonDestroy(){

super.onDestroy();

Toast.makeText(MainHelloService.this,"MainHelloService onDestroy", Toast.LENGTH_SHORT).show();

Log.i(tag,"MainHelloService onDestroy");

}

}

了解了Service的概念、生命周期,又跟着做了一个实例,相信大家现在对Service的使用已经有了一个基本的掌握了。

2012年7月14日

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值