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

private OnClickListener listener = new OnClickListener(){
@Override
public void onClick(View v) {
if(v==button){
Intent service = new Intent(MainActivity.this,MediaPlayerService.class);
MainActivity.this.startService(service); //开启服务
}
if(v==button2){
Intent name = new Intent(MainActivity.this,MediaPlayerService.class);
MainActivity.this.stopService(name); //停止服务
}
}
};

MediaPlayerService.java

package com.xiazdong.mediaplayer;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder; public class MediaPlayerService extends Service {
private MediaPlayer player;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
player = MediaPlayer.create(getApplicationContext(), R.raw.xiazdong);
player.setLooping(true);
try {
//因为MediaPlayer的create已经调用了prepare方法,因此此处直接start方法即可
player.start();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onDestroy() { //停止服务
super.onDestroy();
if(player!=null){
player.stop();
player.release();
player = null;
}
}
}

在AndroidManifest.xml中添加:

<span style="font-size:12px;"><service android:name=".MediaPlayerService"/>  </span>

Android入门:Service入门介绍的更多相关文章

  1. Android:Service

    Android Service: http://www.apkbus.com/android-15649-1-1.html android service 的各种用法(IPC.AIDL): http: ...

  2. 下面就介绍下Android NDK的入门学习过程(转)

    为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大. 2. 在NDK中调用第三方C/C++库,因为大部分的开源库 ...

  3. 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用

    085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...

  4. 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字

    084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...

  5. 083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法

    083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法 本文知识点:构造方法-带参构造方法 说明:因为时间紧张, ...

  6. 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法

    082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...

  7. 043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用

    043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用 本文知识点:do-while循环介绍及应用 do-while循 ...

  8. 011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三—— 变量值——即Java中的“字面值”

    011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三-- 变量值--即Java中的"字面值" 变量值可以是 ...

  9. 010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二——变量类型——即Java中的数据类型

    010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二--变量类型--即Java中的数据类型 Java中变量的三要素 变量名 变 ...

随机推荐

  1. source in sight 删除工程

    用十六进制编辑器打开  "我的文档/Source Insight/Projects/PROJECTS.DB3" 文件 ,找到你要删除的项目路径及名称字符串,用0替换相关位置的数据.

  2. angularJS中自定义指令

    学习了angularJS一周,但是大部分时间被自定义指令占用了.博主表示自学互联网好心塞的,发现问题的视觉很狭窄,这比解决问题要更难.这篇文章首先介绍了自定义,然后介绍了在使用自定义指令遇到的问题. ...

  3. 使用GEO数据库来筛选差异表达基因,KOBAS进行KEGG注释分析

    前言 本文主要演示GEO数据库的一些工具,使用的数据是2015年在Nature Communications上发表的文章Regulation of autophagy and the ubiquiti ...

  4. setTimeout关于函数名做参数的问题

    前几天在调bug时发现一个诡异的问题. function test(){ alert('4 seconds!'); } setTimeout(test(),4000); 这段代码立即执行,当时看不出问 ...

  5. nginx manager

    ====================================================@echo offrem 当前bat的作用 echo ==================beg ...

  6. 打开Visual Studio Code,rg.exe占用CPU过高

    打开Visual Studio Code,再打开文件-首选项-设置 搜索“followSymlinks” 将“√”给取消掉

  7. PHP开源系统学习之fluxbb_2

    谴责下某位同学,转载了我的上一篇文章,也不给个原文地址,希望这次再来转时能加上. //检查登录,在common.php判断 //cookie串: 2|dc4fab5bb354be5104bae0aff ...

  8. filter、map、reduce区别

    1.filter filter(function,sequence)-->list,tuple or string 1)       参数func是自定义的过滤函数,在函数func(item)中 ...

  9. loj #2325. 「清华集训 2017」小Y和恐怖的奴隶主

    #2325. 「清华集训 2017」小Y和恐怖的奴隶主 内存限制:256 MiB时间限制:2000 ms标准输入输出 题目类型:传统评测方式:文本比较   题目描述 "A fight? Co ...

  10. 【常见Web应用安全问题】

    Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些. 常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Sit ...