Android服务使用方法 - 简单音乐播放实例

  服务翻译成中文是服务,熟悉的Windows系统的同学一定很熟悉了。的Android里的服务跟的Windows里的服务功能差不多,就是一个不可见的进程在后台执行

      Android中的服务,它与活动不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,服务进程并没有结束,它仍然在后台运行,例如我们打开一个音乐播放器来听音乐,在听音乐的同时也想做下其它的事情,比如上网聊Q,或者上网浏览新闻之类的事情。这样的话,我们就需要用到服务服务了。下面我们以一个简单的音乐播放器的实例说明下服务的生命周期和服务的使用。

下面是音乐播放器演示的程序结构图:

Android服务的生命周期:

Android中Service的生命周期并不是很复杂,只是继承了onCreate(),onStart(),onDestory()三个方法。当我们第一次启动服务时,调用onCreate个方法,当停止服务时,调用onDestory()方法。如果服务已经启动了,第二次再启动同一个服务时,只是调用onStart()这个方法了。

Android服务的使用:

[1]参照上面的程序结构图,我们可以创建一个Android程序,在src目录下创建一个Activity,一个继承自服务类的服务类;同时在资源文件夹文件,如把music.mp3音乐文件放在该目录下。该程序的主界面如下:

[2] layout目录下的main.xml文件的源码:

[c-sharp]  查看普通 拷贝  
  1. <?xml version = “1.0”  encoding = “utf-8” ?>  
  2. <LinearLayout xmlns:android = “http://schemas.android.com/apk/res/android”  
  3.     android:orientation = “vertical”  
  4.     android:layout_width = “fill_parent”  
  5.     android:layout_height = “fill_parent”  
  6.     >  
  7.     <TextView    
  8.        android:layout_width = “fill_parent”   
  9.        android:layout_height = “wrap_content”   
  10.        android:text = “欢迎来到Andy的博客!  
  11.        android:textSize = “16sp” />     
  12.     <TextView    
  13.        android:layout_width = “fill_parent”   
  14.        android:layout_height = “wrap_content”   
  15.        android:text = “音乐播放服务” />  
  16.     <按钮  
  17.        android:id = “@ + id / startMusic”   
  18.        android:layout_width = “wrap_content”  
  19.        android:layout_height = “wrap_content”  
  20.        android:text = “开启音乐播放服务” />  
  21.     <按钮  
  22.        android:id = “@ + id / stopMusic”   
  23.        android:layout_width = “wrap_content”  
  24.        android:layout_height = “wrap_content”  
  25.        android:text = “停止音乐播放服务” />  
  26.    <按钮  
  27.       android:id = “@ + id / bindMusic”   
  28.       android:layout_width = “wrap_content”  
  29.       android:layout_height = “wrap_content”  
  30.       android:text = “绑定音乐播放服务” />  
  31.    <按钮  
  32.       android:id = “@ + id / unbindMusic”   
  33.       android:layout_width = “wrap_content”  
  34.       android:layout_height = “wrap_content”  
  35.       android:text = “解除 - 绑定音乐播放服务” />  
  36. </ LinearLayout>  

[3] src目录下MusicService。Java源码:

[c-sharp]  查看普通 拷贝  
  1. package com.andyidea.service;  
  2. import android.app.Service;  
  3. import android.content.Intent;  
  4. import android.media.MediaPlayer;  
  5. import android.os.IBinder;  
  6. import android.util.Log;  
  7. import android.widget.Toast;  
  8. public class  MusicService extends Service {   
  9.     //为日志工具设置标签  
  10.     private static  String TAG =  “MusicService” ;   
  11.     //定义音乐播放器  
  12.     private  MediaPlayer mPlayer;  
  13.       
  14.     //该服务不存在需要被创建时被调用,不管startService()还是bindService()都会启动时调用该方法  
  15.     @覆盖  
  16.     public void  onCreate(){   
  17.         Toast.makeText(this ,  “MusicSevice onCreate()”  
  18.                 ,Toast.LENGTH_SHORT).show();  
  19.         Log.e(TAG,  “MusicSerice onCreate()” );  
  20.           
  21.         mPlayer = MediaPlayer.create(getApplicationContext(),R.raw.music);  
  22.         //设置可以重复播放  
  23.         mPlayer.setLooping(true );  
  24.         super.onCreate();  
  25.     }}  
  26.       
  27.     @覆盖  
  28.     public void  onStart(Intent intent,  int  startId){   
  29.         Toast.makeText(this ,  “MusicSevice onStart()”  
  30.                 ,Toast.LENGTH_SHORT).show();  
  31.         Log.e(TAG,  “MusicSerice onStart()” );  
  32.           
  33.         mPlayer.start();  
  34.           
  35.         super.onStart(intent,startId);  
  36.     }}  
  37.     @覆盖  
  38.     public void  onDestroy(){   
  39.         Toast.makeText(this ,  “MusicSevice onDestroy()”  
  40.                 ,Toast.LENGTH_SHORT).show();  
  41.         Log.e(TAG,  “MusicSerice onDestroy()” );  
  42.           
  43.         mPlayer.stop();  
  44.           
  45.         super.onDestroy();  
  46.     }}  
  47.     //其他对象通过bindService方法通知该服务该方法被调用  
  48.     @覆盖  
  49.     public  IBinder onBind(Intent intent){  
  50.         Toast.makeText(this ,  “MusicSevice onBind()”  
  51.                 ,Toast.LENGTH_SHORT).show();  
  52.         Log.e(TAG,  “MusicSerice onBind()” );  
  53.           
  54.         mPlayer.start();  
  55.           
  56.         return null ;   
  57.     }}  
  58.     //其它对象通过unbindService方法通知该服务时该方法被调用  
  59.     @覆盖  
  60.     public  boolean onUnbind(Intent intent){  
  61.         Toast.makeText(this ,  “MusicSevice onUnbind()”  
  62.                 ,Toast.LENGTH_SHORT).show();  
  63.         Log.e(TAG,  “MusicSerice onUnbind()” );  
  64.           
  65.         mPlayer.stop();  
  66.           
  67.         return  super.onUnbind(intent);  
  68.     }}  
  69.       
  70. }}  

[4] src目录下MusicServiceActivity源码:

[c-sharp]  查看普通 拷贝  
  1. package com.andyidea.service;  
  2. import android.app.Activity;  
  3. import android.content.ComponentName;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.content.ServiceConnection;  
  7. import android.os.Bundle;  
  8. import android.os.IBinder;  
  9. import android.util.Log;  
  10. import android.view.View;  
  11. import android.view.View.OnClickListener;  
  12. import android.widget.Button;  
  13. import android.widget.Toast;  
  14. public class  MusicServiceActivity extends Activity {   
  15.       
  16.     //为日志工具设置标签  
  17.     private static  String TAG =  “MusicService” ;   
  18.       
  19.     /** 在第一次创建活动时调用。* /  
  20.     @覆盖  
  21.     public void  onCreate(Bundle savedInstanceState){   
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layoutmain);  
  24.           
  25.         //输出Toast消息和日志记录  
  26.         Toast.makeText(this ,  “MusicServiceActivity” ,  
  27.                 Toast.LENGTH_SHORT).show();  
  28.         Log.e(TAG,  “MusicServiceActivity” );  
  29.           
  30.         initlizeViews();  
  31.     }}  
  32.       
  33.     private void  initlizeViews(){   
  34.         Button btnStart =(Button)findViewById(R.id.startMusic);  
  35.         Button btnStop =(Button)findViewById(R.id.stopMusic);  
  36.         Button btnBind =(Button)findViewById(R.id.bindMusic);  
  37.         Button btnUnbind =(Button)findViewById(R.id.unbindMusic);  
  38.           
  39.         //定义点击监听器  
  40.         OnClickListener ocl =  new  OnClickListener(){  
  41.               
  42.             @覆盖  
  43.             public void  onClick(View v){   
  44.                 //显示指定意指所指的对象是个服务  
  45.                 意向意图=   意图(MusicServiceActivity。这个,MusicService。);  
  46.                 switch (v.getId()){  
  47.                 case  R.id.startMusic:  
  48.                     //开始服务  
  49.                     startService(intent);  
  50.                     突破;  
  51.                 case  R.id.stopMusic:  
  52.                     //停止服务  
  53.                     stopService(intent);  
  54.                     突破;  
  55.                 case  R.id.bindMusic:  
  56.                     //绑定服务  
  57.                     bindService(intent,conn,Context.BIND_AUTO_CREATE);  
  58.                     突破;  
  59.                 case  R.id.unbindMusic:  
  60.                     //解绑服务  
  61.                     unbindService(conn);  
  62.                     突破;  
  63.                 }}  
  64.             }}  
  65.         };  
  66.           
  67.          //绑定点击监听  
  68.         btnStart.setOnClickListener(ocl);  
  69.         btnStop.setOnClickListener(ocl);  
  70.         btnBind.setOnClickListener(ocl);  
  71.         btnUnbind.setOnClickListener(ocl);  
  72.     }}  
  73.       
  74.     //定义服务链接对象  
  75.     final ServiceConnection conn =  new  ServiceConnection(){  
  76.           
  77.         @覆盖  
  78.         public void  onServiceDisconnected(ComponentName name){   
  79.             Toast.makeText(MusicServiceActivity。这个,  “MusicServiceActivity onSeviceDisconnected”  
  80.                     ,Toast.LENGTH_SHORT).show();  
  81.             Log.e(TAG,  “MusicServiceActivity onSeviceDisconnected” );  
  82.         }}  
  83.           
  84.         @覆盖  
  85.         public void  onServiceConnected(ComponentName name,IBinder service){   
  86.             Toast.makeText(MusicServiceActivity。这个,  “MusicServiceActivity onServiceConnected”  
  87.                     ,Toast.LENGTH_SHORT).show();  
  88.             Log.e(TAG,  “MusicServiceActivity onServiceConnected” );  
  89.         }}  
  90.     };  
  91. }}  

[5]最后,我们别忘了在AndroidManifest.xml配置文件中添加对服务的注册。在应用程序节点中添加

      <service android:name =“。MusicService”/>进行注册。

[6]我们来看下面的程序运行后的Log.e中显示的服务生命周期

[7]我们在Android终端设备中查看下刚才启动的音乐播放服务,看看我们退出程序后,是不是该程序的服务还在运行的呢?按如下步骤:菜单 - >设置 - >应用程序 - >运行服务。在弹出的运行服务中可以看到有哪些服务在运行。

这样我们就看到我们退出程序后,是由于该服务还在后台运行着,所以我们的音乐还可以继续播放着。就这样,我们就可以一边享受音乐,一边可以聊QQ,或者浏览新闻等等中。


文章出处:http://blog.csdn.net/cjjky/article/details/6552852

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值