Android 实例展现如何不同程序间的Serivce调用
2010-09-15 00:10:00 来源:WEB开发网一般使用Service都是实现一个服务,如果说这个服务只是为了自己的那个应用程序其实是大材小用,在Android 中提供了很好的Service的调用方法称之为AIDL。扩展这个功能,只要一个提供了一个AIDL接口,那么我就能使用这个Service。不管他是是不是自己写的Service。
设计是这样的有A、B两个程序,A程序使用startService开始一个Service并且在A程序退出后Service也能继续,在Service创建之前A程序会往Service里放一个字符串,而这个Service的作用就是为了给其他程序提供这个字符串。B程序启动之后会绑定A程序里的Service。并且获得Service中的字符串并显示。 简单的框图如下
如图所示使用AIDL是可以跨程序来访问Service的。(com.shinestudio.demo.service 不同于 com.shinestudio.demo.reademo 所属不同的包 图里多了个点 不好意思)
下面是整个构建的过程
第一步 写AIDL文件
关于AIDL的简述网上摘的 读者大致了解一下
AIDL语法很简单,可以用来声明一个带一个或多个方法的接口,也可以传递参数和返回值。由于远程调用的需要, 这些参数和返回值并不是任何类型.下面是些AIDL支持的数据类型:
1. 不需要import声明的简单Java编程语言类型(int,boolean等)
2. String, CharSequence不需要特殊声明
3. List, Map和Parcelables类型, 这些类型内所包含的数据成员也只能是简单数据类型, String等其他比支持的类型. ((另外: 我没尝试Parcelables, 在Eclipse+ADT下编译不过, 或许以后会有所支持).
下面是AIDL语法:
// 文件名: SomeClass.aidl
// 文件可以有注释, 跟java的一样
// 在package以前的注释, 将会被忽略.
// 函数和变量以前的注释, 都会被加入到生产java代码中.package com.cmcc.demo;
interface ITaskBinder {
//函数跟java一样, 可以有0到多个参数 ,可以有一个返回值
boolean isTaskRunning();
void stopRunningTask();
//参数可以是另外的一个aidl定义的接口
void registerCallback(ITaskCallback cb);
更多精彩
赞助商链接