|
|
680本讲内容:Service
1、Service的概念
2、Service的生命周期
3、实例:控制音乐播放的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在绑定对象被销毁后也被销毁了。 下面把代码分享如下:1、建立一个新项目名字叫 Lesson14_HelloService,Activity起名叫MAInHelloService.java2、res/layout/main.xml中代码写成 - < ?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="音乐播放服务" android:textsize="25sp" android:layout_margintop="10dp">
<button android:text="开启音乐播放服务" android:textsize="20sp" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="10dp">
</button>
<button android:text="停止音乐播放服务" android:textsize="20sp" android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="10dp">
</button>
<button android:text="绑定音乐播放服务" android:textsize="20sp" android:id="@+id/Button03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="10dp">
</button>
<button android:text="解绑定音乐播放服务" android:textsize="20sp" android:id="@+id/Button04" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="10dp">
</button>
</textview></linearlayout>
复制代码 2、在res目录中建立一个raw目录,并把一个音乐文件babayetu.mp3拷贝进来3、在Activity的同目录新建一个service文件MusicService.java - package android.basic.lesson14;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
public class MusicService extends Service {
//为日志工具设置标签
String tag ="MusicService";
//定义音乐播放器变量
MediaPlayer mPlayer;
//其他对象通过bindService方法通知该Service时该方法会被调用
@Override
public IBinder onBind(Intent intent) {
Toast.makeText(this,"MusicService onBind()",Toast.LENGTH_SHORT).show();
Log.i(tag, "MusicService onBind()");
mPlayer.start();
return null;
}
//其他对象通过unbindService方法通知该Service时该方法会被调用
@Override
public boolean onUnbind(Intent intent){
Toast.makeText(this, "MusicService onUnbind()", Toast.LENGTH_SHORT).show();
Log.i(tag, "MusicService onUnbind()");
mPlayer.stop();
return false;
}
//该服务不存在需要被创建时被调用,不管startService()还是bindService()都会在启动时调用该方法
@Override
public void onCreate(){
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
public void onStart(Intent intent,int startid){
Toast.makeText(this,"MusicService onStart",Toast.LENGTH_SHORT).show();
Log.i(tag, "MusicService onStart()");
mPlayer.start();
}
//该服务被销毁时调用该方法
@Override
public void onDestroy(){
Toast.makeText(this, "MusicService onDestroy()", Toast.LENGTH_SHORT).show();
mPlayer.stop();
Log.i(tag, "MusicService onDestroy()");
}
}
复制代码 4、MainHelloService.java中的代码:
好了,本讲就到这里。
|
上一篇: Android游戏开发之小球重力感应实现(二十五)下一篇: 第十三讲:用户界面 View(八)
|