`
jguangyou
  • 浏览: 375662 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AIDL传输简单数据类型示例

 
阅读更多
  • 定义一个AIDL接口(扩展名.aidl):
package com.example.aidlservice;

 interface ICat {
	String getColor();
	double getWeigth();
	
}
  •  定义一个service
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();
	}

}

 

  • Manifest文件
 <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 传输笔迹 客户端

    本教程将详细解释如何使用AIDL传输笔迹数据,以及如何创建简单的客户端应用。** ### 1. AIDL简介 AIDL是Android系统提供的一种工具,允许一个应用组件向其他应用组件暴露接口,使得不同应用之间能够交换数据和服务...

    传递复杂数据类型的AIDL服务的客户端

    "传递复杂数据类型的AIDL服务的客户端"是一个示例程序,展示了如何通过AIDL在服务与客户端之间传递包含复杂数据类型的数据。 在Android中,当需要在不同的应用程序组件之间交换数据时,由于进程隔离,直接调用是不...

    简单的aidl示例

    - AIDL支持的数据类型有限,包括基本类型、String、List、Map以及实现了Parcelable接口的自定义类型。 - 当传递复杂对象时,确保对象实现了Parcelable接口,否则无法通过AIDL传输。 - `onServiceConnected()`可能...

    aidl传递复杂数据

    在标题“aidl传递复杂数据”中,我们讨论的是如何通过AIDL传输不仅仅是基本类型,还包括更复杂的对象,如ORMLite管理的数据库模型。 ORMLite(Object-Relational Mapping Lite)是一个轻量级的ORM库,用于简化...

    aidl 传输笔迹 接收端

    本示例中的"aidl 传输笔迹 接收端"是利用AIDL实现两个Android应用间传输笔迹数据的简单demo。下面我们将详细讲解AIDL的基础概念、使用步骤以及如何处理笔迹数据。 1. **AIDL简介** AIDL是Android为了解决不同应用...

    AIDL.rar示例

    2. **数据类型**: AIDL支持基本的数据类型(如int, String等)以及自定义的Parcelable对象。如果需要传递复杂的数据结构,需要实现Parcelable接口。 3. **进程间通信**: 当客户端调用服务端的AIDL接口方法时,实际...

    AIDL简单示例

    **Android Interface Definition Language ...以上就是关于AIDL的一个简单示例,包括其基本概念、工作原理以及处理复杂数据类型的传递。理解并熟练运用AIDL,可以有效地实现Android应用间的高效、安全的进程间通信。

    Android aidl实现传递对象

    AIDL文件是一种定义接口的文本文件,它以.aidl为扩展名,包含了方法签名和数据类型声明。这些定义会被Android编译器转换成Java代码,生成服务端和服务客户端所需的接口类。AIDL支持基本数据类型以及Parcelable接口...

    AIDL List传递 String传递(android studio)

    在这个"AIDL List传递 String传递(android studio)"的示例中,我们将深入探讨如何通过AIDL处理List数据和String数据的传递。 首先,让我们理解AIDL的基本结构。AIDL文件是一个文本文件,它定义了一个接口,这个...

    android aidl

    在示例项目中,可能会包含复杂数据类型的使用,如自定义类或者数组。自定义类需要在AIDL文件中声明,以便系统能生成相应的序列化和反序列化代码。 4. **'in'、'out'和'intout'关键字** - `'in'`:表示参数从调用方...

    Android AIDL示例代码.zip

    所有参数类型必须是Android支持的数据类型或者其他的AIDL接口。 3. **自动生成的代码**:当你编译一个包含AIDL的项目时,Android编译器会自动生成Java绑定类,这些类用于在客户端和服务端之间传递数据和调用服务方法...

    AIDL的简单使用

    每个参数都有其类型,支持基本数据类型、List、Map以及自定义的Parcelable类。 - **数据传输**:在AIDL中,所有传入和传出的数据都必须是平台支持的类型或者是实现了Parcelable接口的自定义类。这是因为数据需要...

    android AidlDemo(简单aidl的例子)

    - AIDL支持的数据类型有限,基本类型、String、List、Map等可以被直接传递,复杂对象需要自定义Parcelable或Serializable接口。 - 进程间的通信可能会导致性能开销,因此应谨慎使用,尤其是在处理大量数据或频繁...

    AidlDemo(简单aidl的例子) Android源码.rar

    **Android Aidl基础详解** ...通过AidlDemo的实践,开发者可以深入了解Android的进程间通信机制,学会如何创建、注册和使用AIDL服务,以及处理各种数据类型。这将有助于构建更健壮、高效的应用程序。

    AIDLDemo,Android aidl 使用demo

    - 数据类型:AIDL支持基本数据类型,如int、String等,以及自定义的数据结构。 例如,一个简单的AIDL接口定义可能如下: ```aidl package com.example.aidldemo; import com.example.aidldemo.MyParcelable; ...

    AndroidAidlDemo(简单aidl的例子).rar

    1. **数据序列化**:由于数据需要跨进程传递,所以所有传入和传出的参数必须是Android支持的数据类型,或者通过AIDL定义的自定义数据类型。 2. **异常处理**:由于服务可能在任何时间被系统销毁,因此需要捕获`...

    Android AIDL示例

    AIDL就像一种简单的接口定义语言,它允许开发者定义方法签名,数据类型,以及在不同进程间传递的数据结构。当一个应用导入了AIDL定义的接口,Android系统会自动生成相应的Java绑定类,这些类处理了跨进程通信的底层...

    AIDL示例代码

    2. **数据类型**: AIDL支持基本的Java数据类型以及自定义的Parcelable和Binder对象。自定义类需要实现Parcelable接口以便于在进程间传递。 3. **文件生成**: 当你编译项目时,Android编译系统会为`.aidl`文件生成...

    aidl 代码示例

    - 参数类型:AIDL支持基本数据类型、List、Map和自定义的数据类型。自定义类型需要同样使用AIDL定义。 - 异步调用:由于跨进程调用的特性,AIDL方法通常是异步的,不能直接返回结果,通常需要回调或者使用Future/...

    AIDL示例-进程间通信

    AIDL支持多种基本数据类型,如int、String等,以及数组、List、Map等复杂数据类型。但是需要注意,由于跨进程的数据传输,所有数据都必须是序列化的。对于自定义对象,需要在AIDL文件中导入并定义它们。 **并发与...

Global site tag (gtag.js) - Google Analytics