android的进程间通信----aidl

aidl的语法非常简单,在要通信的项目中建立.aidl文件,这个文件就是这些项目通信的必要条件。

interface IUser{
		 String getName();
		void setName(String name);
		 String getPassWord();
}
之后就可以建立服务。
aidl文件会编译成继承IInterface的接口,其内部类Stub会继承IBinder和实现IUser。

所以我们只需要写一个继承stub的子类,然后通过Service就可以通信啦(注意stub是继承了IBinder的哦)。

public class MyService extends Service
{
	private MyUser iUser;
	@Override
	public IBinder onBind(Intent intent)
	{
		iUser = new MyUser();
		return  iUser;
	}
	@Override
	public void onCreate()
	{
		// TODO Auto-generated method stub
		super.onCreate();
	}
	@Override
	public void onStart(Intent intent, int startId)
	{
		// TODO Auto-generated method stub
		super.onStart(intent, startId);
	}
	@Override
	public void onDestroy()
	{
		// TODO Auto-generated method stub
		super.onDestroy();
	}
	class MyUser extends IUser.Stub{
		private String name = "ctt";

		@Override
		public String getName() throws RemoteException
		{
			
			return name;
		}

		@Override
		public String getPassWord() throws RemoteException
		{
			
			return "123456";
		}

		@Override
		public void setName(String name) throws RemoteException
		{
			this.name = name;
			
		}
		
	}

}


不过在获取远程对象的onbind返回的对象需要用一个代理:

class MyServiceConnection implements ServiceConnection{

		@Override
		public void onServiceConnected(ComponentName name, IBinder service)
		{	
			IUser iUser = IUser.Stub.asInterface(service);
			try
			{
				System.out.println(iUser.getName()+"");
				System.out.println(iUser.getPassWord());
				iUser.setName("乌索普");
				System.out.println(iUser.getName());
			} catch (RemoteException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		@Override
		public void onServiceDisconnected(ComponentName name)
		{
			
		}
		
	}



你可能感兴趣的:(android的进程间通信----aidl)