Android Aidl实现进程间通信

本文介绍如何使用Android接口定义语言(AIDL)实现Android应用间的进程通信。包括创建服务端与客户端的具体步骤,以及通过示例演示如何进行跨进程调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

aidl英文全写:Android inteface define language,

下面是一个简单的例子通过aidl实现进程间通信

1.创建一个服务端工程,包名为com.test.service

在源文件下创建一个IMyservice.aidl文件,在eclipse开环境下会自动生成IMyservice.java.

package com.test.service;
interface ImyServiceManager{

   String callBack();
   void  setMessage(String str);
}

2.编写一个aidl 的服务类,具体如下

package com.test.service;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.widget.Toast;

public class MyServiceManager extends Service {

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return new MyServiceManagerImpl();
    }
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        Log.i("debug", "service create-------------");
        super.onCreate();
    }

//实现接口定义
    public class MyServiceManagerImpl extends ImyServiceManager.Stub{

        @Override
        public String callBack() throws RemoteException {
            // TODO Auto-generated method stub
            String str="this message from service";
            return str;
        }

        @Override
        public void setMessage(String str) throws RemoteException {
            // TODO Auto-generated method stub
            Log.i("debug", "this is from client msg"+str);
        }
       
    }

}

2.创建客户端调用

新建一个工程,包名com.test.client

把服务端下的gen目录下的包复制到客户端src目录下。创建一个Activity调用服务端

package com.test.client;

import com.test.ImyServiceManager;

import android.app.Activity;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class AidlClientActivity extends Activity {
    /** Called when the activity is first created. */
    ImyServiceManager service;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        bindService(new Intent("com.test.myservicemanager"), connection, BIND_AUTO_CREATE);//绑定服务端
       
       Button but=(Button)findViewById(R.id.button1);
       but.setOnClickListener(new OnClickListener() {
       
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            try {
                Toast.makeText(getApplicationContext(), service.callBack(), Toast.LENGTH_LONG).show();
                service.setMessage("客户端调用");
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           
        }
    });
       
    }
    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
    }
    private ServiceConnection connection=new ServiceConnection() {
       
        @Override
        public void onServiceDisconnected(ComponentName arg0) {
            // TODO Auto-generated method stub
            Log.i("debug", "-------disconnected--------");
           
        }
       
        @Override
        public void onServiceConnected(ComponentName arg0, IBinder binder) {
            // TODO Auto-generated method stub
            Log.i("debug", "-------connected--------");
           service=ImyServiceManager.Stub.asInterface(binder);
        }
    };
}

至此两个进程客户端与服务端即可完成通讯,注意,客户端调用之前,服务端服务必须已经在系统中注册过

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值