android下进程间的通信

进线程间的通信,也即是IPC

需要用到aidl,它是android中定义接口的语言
目的是为了解决进程间的通信问题

  1. 进程间通信的步骤

    1、创建一个XXXService.java文件,在里面定义好接口,把该文件的后缀名改为.aidl
    2、去掉接口和方法中的public
    3、系统会自动生成一个XXXService.java文件,默认帮助我们生成个Stub类,这个类继承了Binder类同时实现了自己定义的接口
    4、用一个类继承Stub,然后实现它里未实现的方法
    5、在另一个程序中,要保证两个应用程序的aidl文件是相同的,即两个文件所在的包名相同
    6、在第二个应用程序中获取自定义类的对象,通过Stub.asinterface()方法

  2. 实现代码如下
    a应用中的代码:

xxxService.aidl

 interface Iserivice1 {
     void callTest(String name,String pwd,int money);
}

XXXSereivce.java

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

public class PayService extends Service {

    @Override
    public IBinder onBind(Intent intent) {

        return new MyService();
    }
    @Override
    public void onCreate() {

        super.onCreate();
    }

    public void callPay(String name,String pwd,int money){
        //boolean flag = false;
        if("zhangsan".equals(name) && "123".equals(pwd) && (money > 0)){
            //Toast.makeText(getApplication(), "充值成功",0).show();
            //flag = true;
            System.out.println("充值成功");
            //return flag;
        }else {
            //Toast.makeText(getApplication(), "充值失败",0).show();
            System.out.println("充值失败");
            //return flag;
        }
    }

    class MyService extends Stub{

        @Override
        public void callTest(String name, String pwd, int money){
            callPay(name,pwd,money);
        }

    }
}

b应用的代码如下:
MainActivity.java

import android.app.Activity;
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.view.View;

public class MainActivity extends Activity {
    private Iserivice1 iserivice1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent intent = new Intent();
        intent.setAction("com.wdj.buyhaoo");
        startService(intent);

        MyConn conn = new MyConn();
        bindService(intent, conn, BIND_AUTO_CREATE);
    }

    public void click(View v) {
        try {
        iserivice1.callTest("zhangsan","123", 123);
        } catch (RemoteException e) {

            e.printStackTrace();
        }
    }

    class MyConn implements ServiceConnection{



        public void onServiceConnected(ComponentName name, IBinder service) {
            iserivice1 = Stub.asInterface(service);
        }

        public void onServiceDisconnected(ComponentName name) {
        }

    }

}

注意:需要在a应用中的清单文件中注册服务

<service android:name="com.wdj.alipay.PayService">\
            <intent-filter>
                <action android:name="com.wdj.buyhaoo"></action>
            </intent-filter>
            </service>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值