Android跨进程通信方式

3 篇文章 0 订阅
1 篇文章 0 订阅

 

  • IPC

IPC是Inter-Process Communication的缩写,是进程间通信或者跨进程通信的意思,在Android中每个app在Linux内核中都属于一个独立的进程,进程之间是独立的,当然内存也是独立的,但是我们有时还是有需求让我们的两个App进行数据共享,我们就来看看Android中我们进行进程间的通讯的。最low的方法就是在sdcard文件存储进行共享

  • Android进程通信的办法

我们先列举出来,然后再进行详细介绍。方法:AIDL、广播接收者、Socket、ContentProvider、sd卡文件共享(最low),下面我们就介绍其如何使用,主要讲解AIDL跨进程通信,也是Google提倡的

  • AIDL

AIDL(Android Interface definition language),这是Android进程内部通讯的语言,aidl文件只有先编译后生成class文件才能被我们的Java代码调用。从Android Framework角度来说,Binder是ServiceManager连接各种Manager(ActivityManager,WindowManager,等等)和相应ManagerService的桥梁,所以说Binder才是跨进程通讯的方式,而AIDL的实现方式就是Binder,使用AIDL,我们很熟悉Stub,其实Stub就是AIDL编译后的一个Java抽象类,这个类集成了android.os.Binder,我们新建MyListener.aidl文件,再看看编译成Java class文件后反编译的Java的文件

MyListener.aidl

// MyListener.aidl
package com.wxx.service;

interface MyListener {
    void sum(String sum);
}

MyListener.java

Client客户端使用代码

private val connection = object : ServiceConnection{
        override fun onServiceDisconnected(name: ComponentName?) {
            myAidl = null
        }

        override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
            myAidl = MyAidl.Stub.asInterface(service)
            myAidl!!.addListener(object : MyListener.Stub(){
                override fun sum(sum: String?) {
                    txt_result.text = "另一个进程计算出来的结果:$sum"
                }
            })
        }
}

 

其实使用就是这么简单,跟Activity和Service直接的通讯差不多,AIDL里为了安全起见,有in、out、inout三个关键字,in代表只允许进不允许出,out代表只允许出不允许进,inout代表可以双向通信

项目地址:Git仓库,该项目是在进程A输入两个数,进程B计算后并返回给进程A的例子,仓库里有预览图、源码、apk

  • Socket

Socket都可以跨服务器通讯,当然跨进行更是so easy,socket原理就是本机开启端口后,咋们直接通过端口通讯,自己定义数据协议就可以,所以说他是无所不能的

  • 广播接收者

这个就是通过广播的形式,两个进程协商广播的action,对于Android开发者是很容易理解的

  • ContentProvider

内容提供者,好比相册,每个app都可以获取相册的数据,这种方式相对繁琐

  • SD卡文件共享

sd卡文件夹下新建文件,多个app都可以访问,呵呵,最简单但是是最low的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值