一、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中点击按钮后执行下面代码:

  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

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

在AndroidManifest.xml中添加:

  1. <service android:name=".MediaPlayerService"/>

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

Service介绍(MediaPlayer应用)的更多相关文章

  1. Android Service总结02 service介绍

    Android Service总结02 service介绍 版本 版本说明 发布时间 发布人 V1.0 介绍了Service的种类,常用API,生命周期等内容. 2013-03-16 Skywang ...

  2. 二十三、Pod的service介绍

    Pod 的 Service 介绍 一.Service 介绍 Kubernetes Service 定义了这样一种抽象: 一个 Pod 的逻辑分组,一种可以访问它们的策略,通常称为微服务. 这一组 Po ...

  3. SOA和Web Service介绍

    博客园中关于SOA和Web Service的介绍 http://www.cnblogs.com/talentbuilder/archive/2010/05/04/1727044.html http:/ ...

  4. android Service介绍

    一.简介 android中service(服务)运行于后台,没有界面.和其他组件一样,service也运行在主线程中,因此不能用它来做耗时的请求或者动作.可以在服务中开启线程,在线程中做耗时操作.可以 ...

  5. Android service介绍和启动方式

    1.Android service的作用: service通常是用来处理一些耗时操作,或后台执行不提供用户交互界面的操作,例如:下载.播放音乐. 2.Android service的生命周期: ser ...

  6. web service介绍

    WEB SEVICE平台 web Service 三种基本元素: SOAP .WSDL .UDDI 什么是SOAP:       XML+HTTP 基本的Web Service平台 SOAP 简易对象 ...

  7. ODI中web service介绍

    ODI WS架构

  8. Android四大组件之一Service介绍-android学习之旅(十二)

    基本概念: service是android四大组件之一,运行在后台执行耗时操作,并不提供用户界面.其他组件如acticity可以通过startService启动该组件,也可以通过bindService ...

  9. Android——Service介绍与例子

    官方定义:Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件.其他应用组件能够启动Service,并且当用户切换到另外的应用场景,Service将持续在后台运行.另外,一个组件 ...

随机推荐

  1. C# devExpress GridControl 行中行 子行 多级行

    在工作中经常会碰到需要做行中行,多级行的情况,不熟的情况下,我也只能试着实现. 命名空间 using DevExpress.XtraEditors.Repository; using System.D ...

  2. 在Delphi中使用C++对象(转)

    源:http://blog.csdn.net/henreash/article/details/7352335 Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难 ...

  3. Counting Intersections

    Counting Intersections Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  4. ecos的app机制

    底层->支持层->业务 底层base 数据库访问 service管理 app管理 kvstore存储 kvcache缓存 支持层 pam登录验证 dbeav数据库扩展功能 site前台 d ...

  5. [转] M2E插件maven-dependency-plugin问题

    转自 : http://blog.csdn.net/cskgnt/article/details/8530526 问题: maven-dependency-plugin (goals "co ...

  6. CMU机器学习课程-简介

    CMU在机器学习研究领域大名鼎鼎,Tom Mitchell 即是该学校老师.学校开设有机器学习课程.如今机器学习应用的领域越来越广泛,之前传统的<机器学习>课程,现在分成一般非机器学习领域 ...

  7. python------unicode字符串转换为其他类型

    问题描述: 一下字符串转换为json类型 {u'src': u'crawl', u'cid': u'Ctengbangguoji', u'datatype': u'ItemBase', u'times ...

  8. LWIP_STM32_ENC28J60_NETCONN_UDP(3)

    前面移植了lwip之后只是简单地做了一个dhcp的程序,但是实际工作中经常要用来通讯,那今天就来讲一讲怎么用lwip来进行UDP通讯 要使用数据通信首先第一步得知道lwip是怎么样保存数据的,在使用n ...

  9. 【转】C++中this指针的用法详解

    1.this指针的用处 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象 ...

  10. codeforces #321 DIV2

    A题: 链接:http://codeforces.com/contest/580/problem/A dp,最长连续不上升子序列 #include<iostream> #include&l ...