Android 笔记 进程间通信

进程间通信

同一个apk文件安装的app下的所有部件(大概)都是同一个进程的。所以这里讲的进程间通信,指的是不同app之间的通信。

实际上,我觉得,如果不同的app通信,用intent,broadcastReceiver就可以了,不过既然有通信的方法,研究一下也无妨。

网络上的例子,包括官网的例子里面,会用到Service部件。这个部件有一点要指出的是:
Service和同app的其他部件是在同一个进程下的,甚至service都没有单独的线程,是和绑定它或者startService()调用者在同一进程的。所以,如果需要进行耗时任务,需要单独的开一个线程在里面。
IntentService类扩展了基础的Service类,并且实现了单独的线程,可以用来执行单次的后台任务,比如下载什么的。

这里说的跨进程,是调用其它app的service,并且互相通信。一般情况下,使用intent只能是开启其他的activity,或者发一个广播,让目标收到。跨进程通信(我更愿意说成app间通信)是不需要频繁的发intent,就可以让两个部件通信。

在service的官方指南中提到过,启动一个service可以用startService()或者bindService(),各自有不同的表现。bindService()叫做 创建绑定服务。
在创建绑定服务的时候,可以用到三个方法,
一,使用Binder类。实现同app的绑定服务。也就是同进程的。
二,使用Messenger类,可以实现跨APP的通信
三,使用AIDL语言创建通信。实际上Messenger类的内核也用到了AIDL语言,相当于是一种便利类。

使用Binder类的时候,可以直接在同app的其他组件里,直接获得service的实例,直接调用里面的方法。

而使用messenger类的时候,因为是不同的app(当然,同app也可以),所以不能直接获得service实例。而是像普通的intent功能一样,通过隐式的intent来启动其他app的组件,然后,从里面创建一个针对目标service的messenger,通信的时候就往这个messenger里面发信息。(因为非同进程,所以不能直接调用里面的方法)

基本就是这样。没什么特别难懂的东西。使用Messenger就足够了。

绑定服务
Android 基于Message的进程间通信 Messenger完全解析
Android aidl Binder框架浅析
服务
Android 接口定义语言 (AIDL)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值