Android入门:Service入门介绍
一、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入门介绍的更多相关文章
- Android:Service
Android Service: http://www.apkbus.com/android-15649-1-1.html android service 的各种用法(IPC.AIDL): http: ...
- 下面就介绍下Android NDK的入门学习过程(转)
为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大. 2. 在NDK中调用第三方C/C++库,因为大部分的开源库 ...
- 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用
085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...
- 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字
084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...
- 083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法
083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法 本文知识点:构造方法-带参构造方法 说明:因为时间紧张, ...
- 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法
082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...
- 043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用
043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用 本文知识点:do-while循环介绍及应用 do-while循 ...
- 011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三—— 变量值——即Java中的“字面值”
011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三-- 变量值--即Java中的"字面值" 变量值可以是 ...
- 010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二——变量类型——即Java中的数据类型
010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二--变量类型--即Java中的数据类型 Java中变量的三要素 变量名 变 ...
随机推荐
- linux日常管理-xarge_exec
在find搜索到文件之后再进行操作 exec是find的一个选项. {}表示前面搜索到的结果,\:是exec特殊的用法. xarge拥有同样的功能,需用选项 -i 可以用在其他命令的后面
- BIOS MCSDK 2.0 User Guide - Acronyms and Definitions
BIOS MCSDK 2.0 User Guide - Texas Instruments Wiki Acronyms and Definitions The following acronyms a ...
- js中object、字符串与正则表达式的方法
对象 1.object.hasOwnProperty(name) 检测object是否包含一个名为name的属性,那么hasOwnProperty方法返回true,但是不包括其原型上的属性. 正则表达 ...
- Servlet编程实例 续3
----------------siwuxie095 Servlet 跳转之请求的转发 修改 LoginServlet.java: package com.siwuxie095.servlet; im ...
- 杭电acm 1034题
Problem Description A number of students sit in a circle facing their teacher in the center. Each st ...
- R语言最好的IDE——RStudio
转自http://www.dataguru.cn/article-1602-1.html 看到很多的R语言教材,介绍的编辑器或者IDE都是很简陋的那些,就没有见到有人提到RStudio.对于不使用Em ...
- Entity Framework:Code-First Tutorial开篇
这个系列文章是关于Entity Framework Code-First的英文系列文章,内容不错,每篇一个主题知识点介绍,特转载过来 原文地址:http://www.entityframeworktu ...
- 【转】Subversion快速入门教程-动画演示
如何快速建立Subversion服务器,并且在项目中使用起来,这是大家最关心的问题,与CVS相比,Subversion有更多的选择,也更加的容易,几个命令就可以建立一套服务器环境,可以使用起来,这里配 ...
- 【转】‘svn’不是内部或外部命令,也不是可运行的程序
解决方法:windows安装svn的时候默认是不安装 svn command line这个东西的,重新打开svn的安装exe,选择modify,将“command line client tools” ...
- 【MYSQL】删除数据后自动增长列归0的问题
在清空数据表后发现自动增长id列在新增数据后仍然会按照之前的顺序生成 强迫症,就是想清空数据后让id从0开始,于是百度 执行以下sql语句可以让自动增长列归0 truncate table 表名 这是 ...