写给初学者Android AIDL必看内容
来源:互联网 发布:网络战争游戏推荐 编辑:程序博客网 时间:2024/05/16 08:15
更好的设计Android软件应该熟悉掌握AIDL IPC机制,可以让你编写的组件类似Windows ActiveX COM一样更好的复用,提供类似像Symbian那样的服务器机制。服务可以很好的解决在后台运行无UI的窗口。我们创建一个aidl文件名为 android123.aidl下面是示例代码,修改于Android SDK文档。
一、创建AIDL文件
package cn.com.android123;
引入声明 import cn.com.android123.IAtmService;
// 声明一个接口,这里演示的是银行ATM程序
interface IBankAccountService {
int getAccountBalance(); //返回整数,无参数
void setOwnerNames(in List<String> names); //不返回,包含一个传入List参数
BankAccount createAccount(in String name, int startingDeposit, in IAtmService atmService); //返回一个自定义类型
int getCustomerList(in String branch, out String[] customerList); //返回整形,输入一个分支,输出一个客户列表
}
二、实现一个接口
显示的提供一个导出接口,为客户端提供绑定。
public class RemoteService extends Service {
@Override
public IBinder onBind(Intent intent) {
if (IRemoteService.class.getName().equals(intent.getAction())) {
return mBinder;
}
if (ISecondary.class.getName().equals(intent.getAction())) {
return mSecondaryBinder;
}
return null;
} //第一个接口
private final IRemoteService.Stub mBinder = new IRemoteService.Stub() {
public void registerCallback(IRemoteServiceCallback cb) {
if (cb != null) mCallbacks.register(cb);
}
public void unregisterCallback(IRemoteServiceCallback cb) {
if (cb != null) mCallbacks.unregister(cb);
}
};//第二个接口
private final ISecondary.Stub mSecondaryBinder = new ISecondary.Stub() {
public int getPid() {
return Process.myPid();
}
public void basicTypes(int anInt, long aLong, boolean aBoolean,
float aFloat, double aDouble, String aString) {
}
};
}
三、客户端交互
通过Android.os提供的Parcelable类型来传递数据,通常我们使用Eclipse+ADT插件来完成,在Eclipse中在 Package Explorer view视图上单击鼠标右键,选择Create Aidl preprocess file for Parcelable classes(创建aidl预编译文件),最终我们创建一个名为android123.aidl文件
import android.os.Parcel;
import android.os.Parcelable;
public final class Rect implements Parcelable {
public int left;
public int top;
public int right;
public int bottom;
public static final Parcelable.Creator<Rect> CREATOR = new Parcelable.Creator<Rect>() {
public Rect createFromParcel(Parcel in) {
return new Rect(in);
}
public Rect[] newArray(int size) {
return new Rect[size];
}
};
public Rect() {
}
private Rect(Parcel in) {
readFromParcel(in);
}
public void writeToParcel(Parcel out) { //当前数据写入到Parcel中
out.writeInt(left);
out.writeInt(top);
out.writeInt(right);
out.writeInt(bottom);
}
public void readFromParcel(Parcel in) { //从Parcel中读取数据
left = in.readInt();
top = in.readInt();
right = in.readInt();
bottom = in.readInt();
}
}
- 写给初学者Android AIDL必看内容
- Android AIDL 必看内容
- VC初学者必看
- C++初学者必看
- vb初学者必看
- java初学者必看
- COM初学者必看
- 嵌入式 初学者必看
- ASP初学者必看
- powerdesigner初学者必看
- java 初学者必看
- Velocity初学者必看
- jQuery初学者必看
- Java初学者必看
- Java初学者必看
- Android开发初学者必看文档:Android开发规范
- Android开发初学者必看文档:Android开发规范
- Android开发初学者必看文档:Android开发规范
- 安装IIS时提示找不到zClientm.exe文件的问题
- 通过AIDL调用Service
- 某烟草局绩效考核系统分析设计清单
- 用户sa登录失败,该用户与可信sql server连接无关联
- 考完驾照-激动得不得了。
- 写给初学者Android AIDL必看内容
- English Time 7
- opencv运动跟踪
- Android 使用 aidl 文件创建服务示例
- JS弹出层/窗口源代码收集
- 模拟电子技术21 36------——共集电极 放大电路
- memset函数
- 珍惜生命,战胜自己,活出精彩
- Ext json传递Date数据问题