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

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

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

Android Service 的生命周期:

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

Android Service 的使用:

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

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

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Welcome to Andy's blog!"

android:textSize="16sp"/>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="音乐播放服务"/>

android:id="@+id/startMusic"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="开启音乐播放服务"/>

android:id="@+id/stopMusic"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="停止音乐播放服务"/>

android:id="@+id/bindMusic"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="绑定音乐播放服务"/>

android:id="@+id/unbindMusic"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="解除 ——绑定音乐播放服务"/>

[3] src目录下MusicService.java源码:

package com.andyidea.service;

import android.app.Service;

import android.content.Intent;

import android.media.MediaPlayer;

import android.os.IBinder;

import android.util.Log;

import android.widget.Toast;

public class MusicService extends Service {

//为日志工具设置标签

private static String TAG = "MusicService";

//定义音乐播放器变量

private MediaPlayer mPlayer;

//该服务不存在需要被创建时被调用,不管startService()还是bindService()都会启动时调用该方法

@Override

public void onCreate() {

Toast.makeText(this, "MusicSevice onCreate()"

, Toast.LENGTH_SHORT).show();

Log.e(TAG, "MusicSerice onCreate()");

mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.music);

//设置可以重复播放

mPlayer.setLooping(true);

super.onCreate();

}

@Override

public void onStart(Intent intent, int startId) {

Toast.makeText(this, "MusicSevice onStart()"

, Toast.LENGTH_SHORT).show();

Log.e(TAG, "MusicSerice onStart()");

mPlayer.start();

super.onStart(intent, startId);

}

@Override

public void onDestroy() {

Toast.makeText(this, "MusicSevice onDestroy()"

, Toast.LENGTH_SHORT).show();

Log.e(TAG, "MusicSerice onDestroy()");

mPlayer.stop();

super.onDestroy();

}

//其他对象通过bindService 方法通知该Service时该方法被调用

@Override

public IBinder onBind(Intent intent) {

Toast.makeText(this, "MusicSevice onBind()"

, Toast.LENGTH_SHORT).show();

Log.e(TAG, "MusicSerice onBind()");

mPlayer.start();

return null;

}

//其它对象通过unbindService方法通知该Service时该方法被调用

@Override

public boolean onUnbind(Intent intent) {

Toast.makeText(this, "MusicSevice onUnbind()"

, Toast.LENGTH_SHORT).show();

Log.e(TAG, "MusicSerice onUnbind()");

mPlayer.stop();

return super.onUnbind(intent);

}

}

[4] src目录下MusicServiceActivity源码:

package com.andyidea.service;

import android.app.Activity;

import android.content.ComponentName;

import android.content.Context;

import android.content.Intent;

import android.content.ServiceConnection;

import android.os.Bundle;

import android.os.IBinder;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.Toast;

public class MusicServiceActivity extends Activity {

//为日志工具设置标签

private static String TAG = "MusicService";

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//输出Toast消息和日志记录

Toast.makeText(this, "MusicServiceActivity",

Toast.LENGTH_SHORT).show();

Log.e(TAG, "MusicServiceActivity");

initlizeViews();

}

private void initlizeViews(){

Button btnStart = (Button)findViewById(R.id.startMusic);

Button btnStop = (Button)findViewById(R.id.stopMusic);

Button btnBind = (Button)findViewById(R.id.bindMusic);

Button btnUnbind = (Button)findViewById(R.id.unbindMusic);

//定义点击监听器

OnClickListener ocl = new OnClickListener() {

@Override

public void onClick(View v) {

//显示指定 intent所指的对象是个 service

Intent intent = new Intent(MusicServiceActivity.this,MusicService.class);

switch(v.getId()){

case R.id.startMusic:

//开始服务

startService(intent);

break;

case R.id.stopMusic:

//停止服务

stopService(intent);

break;

case R.id.bindMusic:

//绑定服务

bindService(intent, conn, Context.BIND_AUTO_CREATE);

break;

case R.id.unbindMusic:

//解绑服务

unbindService(conn);

break;

}

}

};

//绑定点击监听

btnStart.setOnClickListener(ocl);

btnStop.setOnClickListener(ocl);

btnBind.setOnClickListener(ocl);

btnUnbind.setOnClickListener(ocl);

}

//定义服务链接对象

final ServiceConnection conn = new ServiceConnection() {

@Override

public void onServiceDisconnected(ComponentName name) {

Toast.makeText(MusicServiceActivity.this, "MusicServiceActivity onSeviceDisconnected"

, Toast.LENGTH_SHORT).show();

Log.e(TAG, "MusicServiceActivity onSeviceDisconnected");

}

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

Toast.makeText(MusicServiceActivity.this, "MusicServiceActivity onServiceConnected"

,Toast.LENGTH_SHORT).show();

Log.e(TAG, "MusicServiceActivity onServiceConnected");

}

};

}

[5] 最后,我们别忘了在AndroidManifest.xml配置文件中添加对Service的注册。即在application节点中添加

进行注册。

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android调用系统音频播放器,Android使用Service实现简单音乐播放实例相关推荐

  1. 安卓java音乐播放器下一曲_Android实现简单音乐播放器(MediaPlayer)

    Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个 ...

  2. js html5 音乐播放器代码大全,js实现简单音乐播放器

    本文实例为大家分享了js实现音乐播放器的具体代码,供大家参考,具体内容如下 效果图: 可播放暂停继续播放,进度条可拖动,时间展示,声音调节 完整代码(直接拿来用) audio功能开发 * { marg ...

  3. Android 11.0 任务栏中清除掉播放器的进程,状态栏仍有音乐播放器状态问题的解决

    1.概述 在11.0的rom定制化开发中,在点击系统自带的播放器以后,播放音乐的时候,在最近任务栏recents列表中,点击全部清除,发现音乐播放器还在播放音乐,导致出现bug,完整的 解决方法,肯定 ...

  4. html音乐播放器样式,html5扁平化mp3音乐播放器样式代码

    特效描述:html5 扁平化mp3 音乐播放器样式.扁平风格的简易的mp3音乐播放器样式代码.html5 mp3音乐播放器 代码结构 1. 引入JS 2. HTML代码 0:00 0:00 'use ...

  5. Android复习02(ListView具体操作[很详细]、简单音乐播放器)

    2020年 3月24日 星期二 Android录播回放 笔记[腾讯课堂] https://ke.qq.com/webcourse/index.html#cid=989760&term_id=1 ...

  6. android 调用系统的剪切功能,Android实现图片的裁剪(不调用系统功能)

    上一篇文章提及了通过调用系统相册或拍照来实现图片的缩放\裁剪.不过这对于笔者项目的要求同样不适合,笔者需要的是通过对手机屏幕整个进行一个截图,并对这个截图进行裁剪操作. 依靠系统功能确实可以实现图片的 ...

  7. android 调用系统分享到微信,Android调用系统分享直接抵达微信

    前言 相对于使用微信官方的分享sdk,系统调用的分享到微信还是有很大的差异的. 系统分享而微信官方sdk分享的最大区别就是关于朋友圈分享,微信朋友圈对系统分享的限制是只允许分享照片.而对分享给联系人, ...

  8. 计算机音乐播放器功能,一个超级漂亮的音乐播放器!尤其是音频可视化功能

    用于Android的音乐播放器,它使用Visualzer Class呈现当前正在播放的音乐的精美DNA(可视化). 超级漂亮的音乐播放器!尤其是音频可视化功能 用于Android的音乐播放器,它使用V ...

  9. python调用默认播放器_python使用Tkinter实现在线音乐播放器

    本文实例使用Tkinter实现在线音乐播放器的具体代码,供大家参考,具体内容如下 1.先使用Tkinter库写界面 2.写点击按钮触发的事件 (1).使用网易音乐的api,返回数据包装成json格式数 ...

最新文章

  1. 1.2 Kali与Debian的关系
  2. QT中关于按钮以及菜单栏工具添加图标,以及快捷方式
  3. C#请求Post接口
  4. 剑指offer-跳台阶
  5. 关于Zipalign的介绍和使用方法
  6. EasyRTMP CPU占用问题调优(一)
  7. MySQL my.cnf file - Found option without preceding group
  8. 程序开发部门的“飞鸽传书”文件柜上面
  9. 深度学习《Photo Editing》
  10. 用Python操作MySQL(pymysql)
  11. cratedb导入json文件
  12. 一个新的自己从2009年的第一天...
  13. 薪资被倒挂?是怒刷 LeetCode,还是另寻他路?
  14. Linux的链接工具 putty 以及一些命令。
  15. 2287: 【POJ Challenge】消失之物
  16. python jieba库分词_Python基于jieba库进行简单分词及词云功能实现方法
  17. spss因子分析结果解读_SPSS进行问卷量表信度检验(详细操作过程及结果分析)——【杏花开生物医药统计】...
  18. X509证书结构解析
  19. git报错以及解决方法
  20. 【数字IC/FPFA】时序约束--时钟约束

热门文章

  1. 【缓存篇】缓存之CDN---原理篇
  2. 背单词时候是在背什么?
  3. 安装包制作工具Install_Pack 3.0正式版(WPF全代码)
  4. 2020,当做世界第一等
  5. Excel(VBA)自定义右键单击菜单以启动宏(示例代码)
  6. metaRTC纯C版webrtc编程指南
  7. python读取写入文件_Python读取和写入文件
  8. CSS3---选择器分类,最全版
  9. 面向对象程序设计步骤
  10. php socket编程实例