服务(Service)是运行在后台的一段代码。它可以运行在它自己的进程,也可以运行在其他应用程序的上下文(context)里面。其他的组件可以绑定到一个服务上面,通过远程过程调用(RPC)来调用这个方法。例如:媒体播放器的服务,当用户退出媒体选择用户界面,仍然希望音乐可以继续播放,这时就是由服务(Service)来保证当用户界面关闭时音乐继续播放的。
使用服务的方法
- 第一种是通过调用Context.startServece()启动,调用Context.stoptService()结束,startService()可以传递参数给Service。
- 第二种方式是通过调用Context.bindService()启动,调用Context.unbindService()结束,还可以通过ServiceConnection 访问Service。二者可以混合使用,可以先startServece()再unbindService()。
Service的生命周期
- startService()后,即使调用startService()的进程结束了,Service 仍然还存在,直到有进程调用stoptService(),或者Service 自己自杀(stopSelf())。
- bindService()后,Service 就和调用bindService()的进程同生共死,也就是说当调用bindService()的进程死了,那么它bind 的Service 也要跟着被结束,当然期间也可以调用unbindService()让Service 结束。
- 两种方式混合使用时,比如说你startService()了,我bindService()了,那么只有你stoptService()了而且我也unbindService()了,这个Service 才会被结束。
进程生命周期
- Android 系统将会尝试保留那些启动了的或者时绑定了的服务进程。
- 如果该服务正在进程的onCreate(),onStart()或者onDestroy()这些方法中执行时,那么主进程将会成为一个前台进程,以确保此代码不会被停止。
- 如果服务已经开始,那么它的主进程会就重要性而言低于所有可见的进程但高于不可见的进程,由于只有少数几个进程是用户可见的,所以只要不是内存特别低,该服务不会停止。
- 如果有多个客户端绑定了同一个服务,只要客户端中的一个对于用户是可见的,即认为该服务可见。
实现一个当用户界面关闭时音乐继续播放的程序,代码如下:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="peng.test"
android:versionCode="1"
android:versionName="1.0">
...
<application android:icon="@drawable/icon" android:label="@string/app_name">
<service android:name=".Music" >
<intent-filter>
<action android:name="peng.test.START_AUDIO_SERVICE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
</application>
</manifest>
src/peng/test/Music.java 服务类
package peng.test;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
public class Music extends Service {
private MediaPlayer player;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
player = MediaPlayer.create(this, R.raw.aimo);
Log.d("DEBUGTAG", "Music Start");
player.start();
}
public void onDestroy() {
super.onDestroy();
Log.d("DEBUGTAG", "Music Stop");
player.stop();
}
}
src/peng/test/MyMusicPlayer.java Activity 类代码
package peng.test;
import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MyMusicPlayer extends Activity
implements OnClickListener {
private Button playMusic;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
playMusic = (Button)findViewById(R.id.btn_play);
playMusic.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_play) {
startService(new Intent("peng.test.START_AUDIO_SERVICE"));
}
}
}
分享到:
相关推荐
Android高级应用源码-简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片.zip
Linux中jar使用service启动脚本
使用基础的网络请求方式,使用Service下载网络apk文件,然后进行安装的小DEMO
使用service workers让你的Next.js应用程序能够离线工作
Android使用Service播放音乐
一佧浏览器中的HTTP "server",使用service worker可以轻松地发回自己的数据流
使用Android实现的带进度条的播放器,音乐播放在Service中实现播放、暂停、继续和停止,但是停止和进度条的关联还有些问题,有待改进。
简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片.zip项目安卓应用源码下载简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐...
简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片.zip安卓程序项目源码资源下载简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载...
安卓开发-简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片.zip
Android应用源码之简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片.zip
安卓Android源码——简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片.zip
简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
异步下载文件库,使用service开启线程下载并在界面中使用progressbar显示下载进度。其实GB之后DownloadManager已经很完善的实现了下载功能.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能...
Android之Service实现比较大小
详细的介绍Service的使用方式,并用两种方式来启动Service,因为Service是一个服务进程,所以在示例中,我在启动Service和消亡时分别发出notification通知。这个示例包括一张显示的Activity还有一个Service类,其中...
这是本人的Android实验,实验题目是Service的使用,主要是模拟支付宝的调用。