Android入门:Service入门介绍

本文详细介绍了如何在Android应用中利用Service和MediaPlayer类实现背景音乐播放的功能,包括创建服务、配置Service、播放与停止音乐以及Service的生命周期管理。重点在于即使关闭应用,音乐播放仍能持续进行。
摘要由CSDN通过智能技术生成
http://blog.csdn.net/xiazdong/article/details/7772354

一、Service介绍



Service类似于Windows中的服务,没有界面,只是在后台运行;而服务不能自己运行,而是需要调用Context.startService(Intent intent);或Context.bindService(Intent intent)开启服务;


服务分为两种:

(1)访问者与服务无关,则关闭访问者之后,服务能够继续运行,使用startService();

(2)访问者与服务有关(比如访问者需要调用服务提供的方法),则关闭访问者后,服务也要关闭,使用bindService();


服务分为:

(1)本地服务:访问者和服务在一个应用中;

(2)远程服务:访问者和服务在不同应用者;


注:如果我们想让服务开机自动运行,则可以创建一个广播接收者,并在onReceive中调用开启服务代码;


我们这里只介绍“访问者与服务无关”的情况,以后再讲另一种情况;



二、Service核心代码



(1)创建继承Service的类

(2)在AndroidManifest.xml中配置<service>

(3)覆写Service中onCreate();方法


开始服务:


Intent service = new Intent(Context,XxxService.class);

Context.startService(service);

然后会调用onCreate()方法;


停止服务:


Intent service = new Intent(Context,XxxService.class);

Context.stopService(service);

然后会调用onDestroy()方法;


三、Service生命周期


1.通过Context.startService()启动服务


onCreate()-->onStart()-->onDestroy()

onCreate()在创建服务时调用,如果调用多次startService(),onCreate()方法仍然只被调用一次;

onStart()在开始startService()调用时被调用,多次startService(),onStart()方法会被调用多次;

onDestroy()在终止服务时调用;



2.通过Context.bindService()启动服务


onCreate()-->onBind()-->onUnbind()-->onDestroy()

onBind()在绑定服务时调用,如果调用多次bindService(),则onBind()方法只被调用一次;

onUnbind()在解除绑定(unBindService)时调用;


四、MediaPlayer核心代码


Mediaplayer player = MediaPlayer.create(getApplicationContext(), R.raw.xiazdong);//创建MediaPlayer对象

player.setLooping(true);//循环播放

player.start();  //开始播放

player.stop();//停止播放

player.release();//释放资源



四、将MP3播放应用于Service


此处只是实现点击Activity的播放音乐,则开始播放音乐,播放音乐的代码放到Service中,因此就算关闭应用,音乐也不会停止;

效果如下:



MainActivity中点击按钮后执行下面代码:


[java]  view plain copy
  1. private OnClickListener listener = new OnClickListener(){  
  2.     @Override  
  3.     public void onClick(View v) {  
  4.         if(v==button){  
  5.             Intent service = new Intent(MainActivity.this,MediaPlayerService.class);  
  6.             MainActivity.this.startService(service);    //开启服务  
  7.         }  
  8.         if(v==button2){  
  9.             Intent name = new Intent(MainActivity.this,MediaPlayerService.class);  
  10.             MainActivity.this.stopService(name);        //停止服务  
  11.         }  
  12.     }  
  13. };  


MediaPlayerService.java

[java]  view plain copy
  1. package com.xiazdong.mediaplayer;  
  2.   
  3. import android.app.Service;  
  4. import android.content.Intent;  
  5. import android.media.MediaPlayer;  
  6. import android.os.IBinder;  
  7.   
  8. public class MediaPlayerService extends Service {  
  9.     private MediaPlayer player;  
  10.     @Override  
  11.     public IBinder onBind(Intent intent) {  
  12.         return null;  
  13.     }  
  14.     @Override  
  15.     public void onCreate() {  
  16.         super.onCreate();  
  17.         player = MediaPlayer.create(getApplicationContext(), R.raw.xiazdong);  
  18.         player.setLooping(true);  
  19.         try {  
  20.             //因为MediaPlayer的create已经调用了prepare方法,因此此处直接start方法即可  
  21.             player.start();    
  22.         } catch (Exception e) {  
  23.             e.printStackTrace();  
  24.         }    
  25.     }  
  26.     @Override  
  27.     public void onDestroy() {   //停止服务  
  28.         super.onDestroy();  
  29.         if(player!=null){  
  30.             player.stop();  
  31.             player.release();  
  32.             player = null;  
  33.         }  
  34.     }  
  35. }  


在AndroidManifest.xml中添加:

[html]  view plain copy
  1. <service android:name=".MediaPlayerService"/>  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值