快捷搜索:

android播放器(music player)源码分析1-Service,Bin

Android SDK 供给了两种类型的 Service ,用于类似 *nix 守护进程或者 windows 的办事

1. 本地办事 Local Service :用于利用法度榜样内部

2. 远程办事 Remote Service :用于 android 系统内部的利用法度榜样之间

前者用于实现利用法度榜样自己的一些耗时义务,比如查询进级信息,并不占用利用程式比如 Activity 所属线程,而是单开线程后台履行,这样用户体验对照好。

后者可被其他利用法度榜样服用,比如气象预告办事,其他利用法度榜样不必要再写这样的办事,调用已有的即可。

不必要和 Activitye 交互的本地办事

本地办事编写对照简单。首先,要创建一个 Service 类,该类承袭 android 的 Service 类。然后在 Activity 中的 onCreate 和 onDestory 平分手履行以下语句开启办事和竣事办事。

this .startService( new Intent( this , ServiceImpl. class ));

this .stopService( new Intent( this , ServiceImpl. class ));

必要和 Activity 交互的远程办事

上面的示例是经由过程 startService 和 stopService 启动关闭办事的。适用于办事和 activity 之间没有调用交互的环境。假如之间必要通报参数或者措施调用。必要应用 bind 和 unbind 措施。

详细做法是,办事类必要增添接口,比如 ServiceInterface ,别的,办事类必要有一个内部类,这样可以方便造访外部类的封装数据,这个内部类必要承袭 Binder 类并实现 ServiceInterface 接口。还有,便是要实现 Service 的 onBind 措施,不能只传回一个 null 了。

在 android 的 musicplayer 源码中 MediaPlaybackService 应用了以上的办事要领,针对该源码进行阐发:

首先必要懂得进程间通信、必要 AIDL (以及 Binder )

关于 AIDL 的先容在文档: docs/guide/developing/tools/aidl.html

关于 IBinder 的先容在文档: docs/reference/android/os/IBinder.html

以及 Binder : docs/reference/android/os/Binder.html

manifest 中 Service 的语法,见 docs/guide/topics/manifest /service-element.html

以上转自 http://blog.csdn.net/saintswordsman/archive/2010/01/05/5130947.aspx

步骤一:建立 aidl 文件

经由过程 aidl.exe 会在 gen 中天生该 service 类,该类中的成员变量 stub 实现了以下功能:

extends Binder implements ServiceInterface,源码如下

interface IMediaPlaybackService

{void openfile(String path);

void openfileAsync(String path);void open(in int [] list, int position);

...................//接口措施}

public interface IMediaPlaybackService extends android.os.IInterface {

/**天生binder类 */public static abstract class Stub extends android.os.Binder implements

com.android.mymusic.IMediaPlaybackService {private static final java.lang.String DESCRIPTOR = "com.android.mymusic.IMediaPlaybackService";

/** Construct the stub at attach it to the interface. */

public Stub() {this.attachInterface(this, DESCRIPTOR);

}...................

......................................//binder 措施

}

public void openfile(java.lang.String path)throws android.os.RemoteException;

......................................//接口措施

...................

}

步骤二:编写办事的实现类 MediaPlaybackService

您可能还会对下面的文章感兴趣: