package com.example.aidlservice;
interface ICat {
String getColor();
double getWeigth();
}
public class AidlService extends Service {
private String color;
private double weight;
private CatBinder catBinder;
Timer timer = new Timer();
String[] colors = new String[]{"红色","白色","黑色"};
@Override
public IBinder onBind(Intent arg0) {
return catBinder;
}
public class CatBinder extends Stub{
@Override
public String getColor() throws RemoteException {
return color;
}
@Override
public double getWeigth() throws RemoteException {
return weight;
}
}
@Override
public void onCreate() {
super.onCreate();
catBinder = new CatBinder();
timer.schedule(new TimerTask() {
@Override
public void run() {
int rand = (int)(Math.random()*3);
color = colors[rand];
weight = Math.random()*100;
}
}, 0, 800);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
timer.cancel();
}
}
<service android:name=".AidlService">
<intent-filter >
<action android:name="com.example.aidlservice.AIDL_SERVICE"/>
</intent-filter>
</service>
这样,远程调用的servcie就定义好了,在开发工具中,是单独的一个项目哦,然后生成apk,安装。
- Activity调用,要新建一个工程,然后将aidl文件复制到新的项目中。
- activity代码:
public class AIDLActivity extends Activity {
ICat catService;
TextView tView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activitylist);
Button button4 = (Button) this.findViewById(R.id.activitylistbutton4);
tView = (TextView) this.findViewById(R.id.tvw);
Intent intent = new Intent();
intent.setAction("com.example.aidlservice.AIDL_SERVICE");
bindService(intent, connection, Service.BIND_AUTO_CREATE);
button4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
tView.setText(catService.getColor()+"----"+catService.getWeigth());
} catch (RemoteException e) {
e.printStackTrace();
}
Toast.makeText(AIDLActivity.this, "服务已经启动", Toast.LENGTH_LONG).show();
}
});
}
@Override
protected void onStart() {
super.onStart();
}
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
System.err.println("service is unconnected");
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//System.err.println(ICat==null);
catService = ICat.Stub.asInterface(service) ;
System.err.println("service is connected");
}
};
protected void onDestroy() {
super.onDestroy();
unbindService(connection);
};
}
分享到:
相关推荐
本教程将详细解释如何使用AIDL传输笔迹数据,以及如何创建简单的客户端应用。** ### 1. AIDL简介 AIDL是Android系统提供的一种工具,允许一个应用组件向其他应用组件暴露接口,使得不同应用之间能够交换数据和服务...
"传递复杂数据类型的AIDL服务的客户端"是一个示例程序,展示了如何通过AIDL在服务与客户端之间传递包含复杂数据类型的数据。 在Android中,当需要在不同的应用程序组件之间交换数据时,由于进程隔离,直接调用是不...
- AIDL支持的数据类型有限,包括基本类型、String、List、Map以及实现了Parcelable接口的自定义类型。 - 当传递复杂对象时,确保对象实现了Parcelable接口,否则无法通过AIDL传输。 - `onServiceConnected()`可能...
在标题“aidl传递复杂数据”中,我们讨论的是如何通过AIDL传输不仅仅是基本类型,还包括更复杂的对象,如ORMLite管理的数据库模型。 ORMLite(Object-Relational Mapping Lite)是一个轻量级的ORM库,用于简化...
本示例中的"aidl 传输笔迹 接收端"是利用AIDL实现两个Android应用间传输笔迹数据的简单demo。下面我们将详细讲解AIDL的基础概念、使用步骤以及如何处理笔迹数据。 1. **AIDL简介** AIDL是Android为了解决不同应用...
2. **数据类型**: AIDL支持基本的数据类型(如int, String等)以及自定义的Parcelable对象。如果需要传递复杂的数据结构,需要实现Parcelable接口。 3. **进程间通信**: 当客户端调用服务端的AIDL接口方法时,实际...
**Android Interface Definition Language ...以上就是关于AIDL的一个简单示例,包括其基本概念、工作原理以及处理复杂数据类型的传递。理解并熟练运用AIDL,可以有效地实现Android应用间的高效、安全的进程间通信。
AIDL文件是一种定义接口的文本文件,它以.aidl为扩展名,包含了方法签名和数据类型声明。这些定义会被Android编译器转换成Java代码,生成服务端和服务客户端所需的接口类。AIDL支持基本数据类型以及Parcelable接口...
在这个"AIDL List传递 String传递(android studio)"的示例中,我们将深入探讨如何通过AIDL处理List数据和String数据的传递。 首先,让我们理解AIDL的基本结构。AIDL文件是一个文本文件,它定义了一个接口,这个...
在示例项目中,可能会包含复杂数据类型的使用,如自定义类或者数组。自定义类需要在AIDL文件中声明,以便系统能生成相应的序列化和反序列化代码。 4. **'in'、'out'和'intout'关键字** - `'in'`:表示参数从调用方...
所有参数类型必须是Android支持的数据类型或者其他的AIDL接口。 3. **自动生成的代码**:当你编译一个包含AIDL的项目时,Android编译器会自动生成Java绑定类,这些类用于在客户端和服务端之间传递数据和调用服务方法...
每个参数都有其类型,支持基本数据类型、List、Map以及自定义的Parcelable类。 - **数据传输**:在AIDL中,所有传入和传出的数据都必须是平台支持的类型或者是实现了Parcelable接口的自定义类。这是因为数据需要...
- AIDL支持的数据类型有限,基本类型、String、List、Map等可以被直接传递,复杂对象需要自定义Parcelable或Serializable接口。 - 进程间的通信可能会导致性能开销,因此应谨慎使用,尤其是在处理大量数据或频繁...
**Android Aidl基础详解** ...通过AidlDemo的实践,开发者可以深入了解Android的进程间通信机制,学会如何创建、注册和使用AIDL服务,以及处理各种数据类型。这将有助于构建更健壮、高效的应用程序。
- 数据类型:AIDL支持基本数据类型,如int、String等,以及自定义的数据结构。 例如,一个简单的AIDL接口定义可能如下: ```aidl package com.example.aidldemo; import com.example.aidldemo.MyParcelable; ...
1. **数据序列化**:由于数据需要跨进程传递,所以所有传入和传出的参数必须是Android支持的数据类型,或者通过AIDL定义的自定义数据类型。 2. **异常处理**:由于服务可能在任何时间被系统销毁,因此需要捕获`...
AIDL就像一种简单的接口定义语言,它允许开发者定义方法签名,数据类型,以及在不同进程间传递的数据结构。当一个应用导入了AIDL定义的接口,Android系统会自动生成相应的Java绑定类,这些类处理了跨进程通信的底层...
2. **数据类型**: AIDL支持基本的Java数据类型以及自定义的Parcelable和Binder对象。自定义类需要实现Parcelable接口以便于在进程间传递。 3. **文件生成**: 当你编译项目时,Android编译系统会为`.aidl`文件生成...
- 参数类型:AIDL支持基本数据类型、List、Map和自定义的数据类型。自定义类型需要同样使用AIDL定义。 - 异步调用:由于跨进程调用的特性,AIDL方法通常是异步的,不能直接返回结果,通常需要回调或者使用Future/...
AIDL支持多种基本数据类型,如int、String等,以及数组、List、Map等复杂数据类型。但是需要注意,由于跨进程的数据传输,所有数据都必须是序列化的。对于自定义对象,需要在AIDL文件中导入并定义它们。 **并发与...