Android IPC机制(六)在Android Studio中使用AIDL实现跨进程方法调用(补充)

一般来说AIDL 比较多的是机顶盒里面各个厂家apk 的相互调用,那么我们就来实现一个apk之间跨进程通讯的

在前面第三章 我们模拟了在同一个apk中不同进程中实现 。

服务端:在清单文件中把services加上action:




    
        
            
                

                
            
        

        
            
                
            

        
    

 

其余的aidl文件和class不变

 

客户的:

copyaidl文件夹到main目录下面

Android IPC机制(六)在Android Studio中使用AIDL实现跨进程方法调用(补充)_第1张图片

以及对应传输的class对象到Java包下面

此时build项目

然后新建一个aidl绑定的类

package com.amt.bsdiffpatch.utils;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;

import com.ywl5320.jnithread.IGameManager;


/**
 */

public class AidlUtil {

    public IGameManager serviceCfg = null;
     Context mContext;

     public AidlUtil(Context mContext){
         this.mContext =mContext;
     }

    private ServiceConnection serviceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            serviceCfg = IGameManager.Stub.asInterface(iBinder);
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {

            mContext.unbindService(serviceConnection);

        }
    };


    public boolean  bindIptvAidl() {

        try {
            Intent intent = new Intent();
            intent.setAction("com.example.MyService");
            boolean isSucess = mContext.bindService(intent,serviceConnection,mContext.BIND_AUTO_CREATE);
            System.out.println("chenzhu bindIptvAidl isSucess :"+isSucess);
            return isSucess;
        }catch(Exception e){
            System.out.println("chenzhu bindIptvAidl Exception :"+e.toString());
            return false;
        }

    }


}

 

在MainActivity中调用

public class MainActivity extends AppCompatActivity {
   Button mBtnPatch;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


 final AidlUtil aidlUtil = new AidlUtil(this);
        System.out.println("------------>is success"+aidlUtil.bindIptvAidl());

        mBtnPatch = findViewById(R.id.id_btn_patch);
        mBtnPatch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Game game =null;
                try {
                    game=aidlUtil.serviceCfg.getGameList().get(0);
                    System.out.println("========>"+game.gameDescribe);

                }catch(Exception e){

                }
                Toast.makeText(MainActivity.this,"=======>"+game.gameDescribe,Toast.LENGTH_LONG).show();



            }
        });
    }

   
}
注意aidl 绑定是耗时操作!!!

Android IPC机制(六)在Android Studio中使用AIDL实现跨进程方法调用(补充)_第2张图片

 

 

 

你可能感兴趣的:(Android IPC机制(六)在Android Studio中使用AIDL实现跨进程方法调用(补充))