愉快无负担的跨进程通信方式2

1.背景

前一段时间借鉴 EventBus 的思想写了 ProcessBus ( 愉快无负担的跨进程通信方式 ),可以让我们比较方便的进行跨进程通信,但是 EventBus 更多的是被动的监听某个事件,而我们在实际的场景当中,有时还需要主动的调用某个服务。所以又对 ProcessBus 进行了一些扩展,增加了服务的注册和调用的接口,同样也能够非常方便的进行跨进程调用。
欢迎一起共建。

地址:https://github.com/bearhuang-omg/ProcessBus

2.使用方式

新增的接口也非常的简单:

接口参数返回值备注
registerServiceservice: IProcessService注册服务
unRegisterServiceserviceName: String反注册服务
callServicerequest: RequestResponse调用服务

例子:

// 注册服务
Bus.registerService(object : IProcessService {
    override fun call(request: Request): Response {
        Log.i(TAG, "request params:${request.params}")
        return Response("hello world!!!")
    }

    override fun getServiceName(): String {
        return "testService"
    }
})

// 反注册服务
Bus.unRegisterService("testService")

// 调用服务
GlobalScope.launch {
    val request = Request("testService")
    request.addParams("parms1","test")
    val response = Bus.callService(request)
}

3.实现

结构图

整体结构图如下所示:
//图片
我们在调用 registerService 的时候,需要传递 IProcessService 接口,内部会将其封装成一个 Iservice 对象,Iservice 是一个 binder 对象,然后将其传递给主进程,主进程会保存一个服务的 map,其中 key 是 serviceName ,value 是 Iservice 对象。
当另外一个进程来调用时,主进程会通过 serviceName 找到 Iservice ,调用 call 接口,然后返回 Response。

时序图

时序图如下所示:
//图片

步骤备注
1registerService子进程注册服务,传递 Iservice 对象
2callService另一个子进程通过 serviceName 调用服务
3call主进程匹配到服务之后,调用对应的服务
4返回给主进程response子进程执行完成,将结果返回给主进程
5返回给子进程response主进程收到结果,将结果返回给对应的进程
关于性能

从上面的时序图当中可以看到,使用 ProcessBus 调用服务时,需要经历两次跨进程通信。第一次是子进程2 callService,将请求传递给主进程,主进程再将请求传递给子进程1,涉及了两次跨进程通信。
官方吭哧吭哧的搞了一套 binder,好不容易提高了性能,减少了一次内存拷贝,结果 ProcessBus 又把性能给降下去了。
其实这里主要是考虑以下两个因素:

  1. ProcessBus 主要目的是降低跨进程通信的成本,防止每个模块都定义自己的 AIDL 文件,导致越来越难以维护;所以如果业务场景对于性能有较高的要求,可能还是使用原生的 AIDL 实现会比较合适;
  2. 对于频繁跨进程通信的场景,其实有考虑过,提供一个 getService 的接口,返回 binder 对象,让子进程直接获取到 IService 对象,然后就可以直接用 IService 进行通信,而无需通过主进程了。但实际上,提供服务的大多是主进程,通常的一个调用流程如下:
    在这里插入图片描述
    此时,由主进程直接返回 response 会更加高效,因此暂时没有提供 getService 的接口,后续如果有需要,也可以提供出来。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 当心情不愉快的时候,可以尝试以下方法缓解情绪: 1. 做运动:适当的运动可以让身体释放出愉悦的化学物质,如多巴胺和内啡肽,有助于缓解压力和焦虑。 2. 和亲朋好友聊天:与身边的人分享自己的感受,可以让人感觉被理解和支持,减轻心理压力。 3. 冥想:冥想可以让人放松身心,减轻焦虑和疲劳。 4. 做自己喜欢的事情:做一些自己感兴趣的事情,如听音乐、看电影、画画等,可以让自己放松和开心。 5. 睡觉:足够的睡眠可以让身体和大脑得到充分的休息,缓解身体和心理的压力。 希望以上方法能够对您有所帮助。 ### 回答2: 当心情不愉快的时候,我们可以采取一些积极的方法来调整情绪: 1. 深呼吸放松:找一个安静的地方,闭上眼睛,深呼吸几次,慢慢放松身体和思绪,有助于缓解紧张和焦虑情绪。 2. 倾诉和倾听:找一个可以信任的人,将自己的不愉快情绪倾诉出来。通过倾听别人的故事和感受,也可以转移自己的注意力,获得一种情感的宣泄。 3. 运动和放松:进行一些有氧运动,如散步、慢跑或瑜伽,可以释放身体上的紧张感,促进乐观和积极的情绪。 4. 安排自己的时间:为自己设定合理的目标和计划,并有条不紊地完成它们。这将帮助你集中注意力,摆脱那些不愉快的情绪。 5. 寻找快乐的事物:做一些你喜欢的事情,如看电影、听音乐、读书或和朋友聚会等,这些活动会带给你快乐和满足感。 6. 积极思考:改变消极的思维模式,尝试用积极的角度来看待问题和解决困难。想一想你可以感激的事物,将注意力转移到积极的方面。 7. 寻求专业帮助:如果心情不愉快的情绪持续时间较长且影响到日常生活,可以寻求专业心理咨询师的帮助,他们能够帮助你更好地处理情绪和应对压力。 重要的是记住,每个人都会遇到心情不愉快的时候,关键是要寻找适合自己的方法来缓解情绪压力,重回积极乐观的状态。 ### 回答3: 当心情不愉快的时候,我们可以尝试以下几种方法来调整心态: 1. 接受情绪:首先,我们要意识到不愉快情绪是正常存在的一部分,不要对自己的情绪感到过度压抑或责备自己。接受自己的情绪,让自己有权利感受这些情绪。 2. 倾诉与理解:找一个信任的朋友或家人,向他们倾诉自己的感受和烦恼。他们的倾听和理解会帮助我们减轻心理负担,得到情感的支持。 3. 放松与调整:尝试一些放松的活动,例如冥想、呼吸练习、做瑜伽或散步等。这些活动可以帮助我们放松身心,缓解不好的情绪。 4. 寻找解决方案:分析导致心情不愉快的原因,并积极思考解决方案。制定一个行动计划并逐步实施,这会让我们感到积极和有掌控力。 5. 培养积极心态:积极的心态有助于改善心情。我们可以尝试关注自身的成就、感恩身边的美好事物,或者寻找一些积极向上的事物来转移注意力。 6. 寻求专业帮助:如果情绪不愉快持续时间较长或影响到日常生活,我们可以考虑寻求专业心理咨询师或心理医生的帮助。他们可以提供专业的指导和支持,帮助我们更好地处理情绪问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值