zoukankan      html  css  js  c++  java
  • Service介绍(MediaPlayer应用)

    一、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"/>  

        原文:http://blog.csdn.net/xiazdong/article/details/7772354

  • 相关阅读:
    IOS开发-cell的动态高度
    IOS开发-视频,音频,录音简单总结
    cocoapods的安装及注意事项
    CUICatalog: Invalid asset name supplied: (null) _configureCellForDisplay:forIndexPath
    IOS开发—数据库的使用
    IOS开发-键盘通知自定义键盘
    IOS开发-手势简单使用及手势不响应处理办法
    IOS开发-UITextField代理常用的方法总结
    Linux Shell 编程学习笔记
    Java的进程内缓存框架:EhCache
  • 原文地址:https://www.cnblogs.com/wlming/p/5539486.html
Copyright © 2011-2022 走看看