服务(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"));
}
}
}
分享到:
相关推荐
在音乐播放器中,我们使用Service来保证即使用户离开应用程序,音乐播放也能继续进行。为了创建一个音乐播放Service,我们需要继承`Service`类,重写`onStartCommand()`方法,并在此处启动音乐播放的逻辑。同时,别...
本项目"Android 带进度条的使用Service实现的音乐播放器"聚焦于如何在后台Service中使用MediaPlayer类来实现音乐播放,并结合UI界面展示播放进度。以下是这个项目涉及到的关键知识点: 1. **Android Service**: ...
本文将详细介绍如何在 Next.js 应用程序中使用 Service Worker,以及实现离线工作的关键步骤。 首先,我们需要了解Service Worker的工作原理。Service Worker 不直接与网页交互,而是作为中间层存在,监听网络请求...
在Android应用开发中,"Service下载"是指使用Service组件来执行后台下载任务,这通常用于在用户不直接交互的情况下从Web服务器获取数据。Service是一种没有用户界面的组件,它可以长时间运行,即使用户离开应用程序...
压缩包文件名称"browser-server-master"可能是一个示例项目,演示如何在浏览器端使用Service Worker创建HTTP服务器。这个项目可能包含了Service Worker的实现、主页面的注册逻辑以及如何发送和处理数据流的示例代码...
Linux中jar使用service启动脚本
### 一、使用ServiceController启动服务 `ServiceController`类提供了管理Windows服务的能力,包括启动、停止以及查询服务状态等操作。以下是一个简单的示例代码,用于展示如何通过`ServiceController`类来控制服务...
本篇文章将深入探讨如何在Android中使用Service。 一、Service的基本概念 Service是Android系统中的一个特殊组件,它可以在后台运行,不与用户界面直接交互。Service可以启动(Start)或绑定(Bind),两种方式各有...
在这个场景中,我们将探讨如何使用`Service`来实现音乐播放。 首先,我们需要了解`Service`的基本概念。在Android中,`Service`是一种没有用户界面的组件,它通常用于执行长时间运行的任务,如播放音乐、下载数据等...
应用源码之简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片
总之,理解并熟练使用Service对于Android开发者来说至关重要,因为它允许在后台执行任务,如音乐播放、定时任务等,提升用户体验。通过这个“service的使用小demo”,你可以深入理解Service的运作机制,以及如何在...
使用`START_NOT_STICKY`时,如果Service被系统杀死,系统不会自动重启Service,除非开发者通过其他方式(如广播接收器)再次明确启动它。这种模式适用于一次性任务或者任务可以延迟到系统资源充足时再执行的情况。 ...
Android 使用Service和BroadcastReceiver实现音乐播放功能 Service demo中service使用得是新的进程,activity和service日志需要切换进程才能看到,这里是最典型得activity和service交互的过程, activity传递信息很简单...
简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片.zip项目安卓应用源码下载简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐...
Service是Android系统中的一个重要组件,它负责在后台执行长时间运行的操作,不依赖于用户界面。...合理使用Service,可以提高应用的用户体验和稳定性。同时,要注意处理好Service的并发问题,保证应用的流畅运行。
简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片.zip安卓程序项目源码资源下载简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载...
安卓开发-简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片.zip
Android应用源码之简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片.zip
通过binder实现进程间通讯 ,可以使用service的binder或者 AIDL生成的Stub返回binder。实现demo,AIDL实现程序内进程通讯和不同程序间进程通讯,binder驱动
// 服务已连接,可以使用service对象与Service交互 } @Override public void onServiceDisconnected(ComponentName name) { // 服务已断开 } }; ``` ### 3. 发送Notification 在绑定的`Service`中发送`...