如果情景:

创建两个应用appA和appB,appA包括一个Service,此Service有一个堵塞方法每隔10秒钟产生一个随机数字,例如以下:
public int getRandomInt(){Thread.sleep(10000);return someRandomInt;
}

appB调用appA中Service.getRandomInt()的方法,将数字显示在界面上.

解决方式:

我们都知道。从层次上,大体能够分进程,任务,组件。线程。Android系统使得开发人员对于任务、组件界限相对清晰,而对于进程具有进程托管的说法,而对于线程就全然是开发人员自己的问题,Android系统没有做太多的约束。

因为题目相对简单,组件仅仅有一个appB的Activity和一个appA的Service,因此我们的层次关系为:

进程        线程        组件

1、若两个组件在同一进程中:

通过设置<process>属性,将相关应用,塞进一个进程,使得它们能够同生共死,拥有共同的内存区域。

由于问题要求每隔10秒进行一次通信,属密集操作。这样能够节省开支。

自己定义接口:

1)       自己定义一个接口。该接口中有一个得到随机数的空方法。

2)       Server端用一个类继承自Binder并实现该接口。覆写了得到随机数的空方法。

3)       Client端通过ServiceConnection获取到该类的对象。从而可以使用该获取当前下载进度的方法,终于实现实时交互。

4)       Server端重写onBind()方法,返回binder对象。

5)       Activity中重写onServiceConnected获得Service对象。

6)       开一个后台线程。用Service对象调用getRandomInt()。

7)       通过Handler将数据返回给主线程,更新View。

(另开一个后台线程的原因是getRandomInt()里的方法sleep(10000)会使main线程休眠。造成界面卡顿。

事实上这样使Service组件浪费。最好的方式是启动Service。然后再进行通信)

2、若两个组件不在同一进程中:

设置<process>属性,划分到不同的进程

RPC即Remote Procedure Call远程进程调用。而Android的进程间的通信是通过AIDL服务实现。以Binder为基础的IPC是RPC的一部分。

1)       在Eclipseproject的package文件夹中建立一个扩展名为aidl的文件。aidl文件里定义的是AIDL服务的接口。即面向接口的编程。同上含有getRandomInt()的空方法。

2)       建立一个服务类(Service的子类)。

实现由aidl文件生成的getRandomInt()。

3)       在AndroidManifest.xml文件里配置AIDL服务。即在Service中intent-filter标签下声明。

4)       在appB的Activity内开一个后台线程,线程内创建ServiceConnection对象  ,获得AIDL服务对象 ,调用getRandomInt()方法。

5)       通过Handler将数据返回给主线程,更新View。

(与单进程类似)

假设单纯实现组件之间的通信,而不是调用另个组件的方法,能够有很多其它方式:

在同一进程中:

1)在appA的manifest文件里设置Service的Android:exported="true"。

2)appB的Activity设置监听事件,通过startService()发送intent的方式调用启动appA的Service。

然后通过Handler、SharedPreferences等方式线程间传递数据。

而在不同一进程中:

能够使用Boradcast。ContentProvider。Mssenger(信使)交互方式进行跨进程的数据传递。

【Android个人理解(八)】跨应用调用不同组件的方法相关推荐

  1. js php调用webservice,js跨域调用WebService的使用方法

    这次给大家带来js跨域调用WebService的使用方法,js跨域调用WebService的注意事项有哪些,下面就是实战案例,一起来看一下. 步骤1. 在web.config中的system.web节 ...

  2. iframe调用父页面方法_5.1 vue中子组件调用父组件的方法,务必理解自定义事件的重要性...

    问题:vue中子组件调用父组件的方法 通过v-on 监听 和$emit触发来实现: 1.在父组件中 通过v-on 监听 当前实例上的 自定义事件. 2.在子组件 中 通过'$emit'触发 当前实例上 ...

  3. 来总结一下在VC中调用COM组件的方法

    来总结一下在VC中调用COM组件的方法(大家来补充) [问题点数:50分,结帖人_foo] http://bbs.csdn.net/topics/50319093 发表于: 2004-04-17 16 ...

  4. Vue中父组件调用子组件的方法

    场景 SpringBoot+Vue+Echarts实现选择时间范围内数据加载显示柱状图: SpringBoot+Vue+Echarts实现选择时间范围内数据加载显示柱状图_BADAO_LIUMANG_ ...

  5. Angular中父组件通过ViewChild调用子组件的方法

    场景 Angualr中通过原生js和ViewChild的方式获取dom: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10586 ...

  6. vue 父组件 调用 子组件的方法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 我们都知道通过$ref可以获取到某个DOM,但是它也可以用来获取子组件的实例,调用子组件的方法 例: ...

  7. vue中组件之间调用方法——子组件调用父组件的方法 父组件调用子组件的方法

    vue中组件之间调用方法--子组件调用父组件的方法 & 父组件调用子组件的方法 1.vue中子组件调用父组件的方法 1.1.第一种方法是直接在子组件中通过this.$parent.event来 ...

  8. vue父组件中调用子组件中的方法 及vue父组件调用孙子组件的方法

    一:通过ref直接调用子组件的方法: 子组件child.vue: <template><div>我是子组件</div> </template> < ...

  9. 子组件调用父组件中方法的方法

    1.在子组件中用this.$parent.fn()来调用父组件的方法 父组件中: <script>export default {methods: {parentFn() {console ...

最新文章

  1. 动画产业基础学习教程 Rad How to Class – Animation Industry Fundamentals
  2. 拖拽批量上传图片如何保证 顺序_使用 Eagle 探索图片管理新边界
  3. hdu 3635(并查集+路径压缩变形)
  4. Ubuntu18 搭建apache2+php5.6+mysql服务器
  5. mysql 表损坏_MYSQL数据表损坏的原因分析和修复方法小结(推荐)
  6. 创建一个Windows Service应用程序
  7. QT学习-10/31/2012
  8. 逻辑回归分析与回归分析_逻辑回归从零开始的情感分析
  9. 伙伴算法的核心思想是回收时进行相邻块的合并_Linux内存管理之伙伴算法
  10. 微型计算机原理与接口技术
  11. 字典表该如何写查询语句?
  12. bootstrap日期时间选择器datetimepicker 插件位置错乱解决
  13. 2020 dns排名_2020年新版全球/全国各地ISP的DNS服务器地址表
  14. 10大耗油,10大省油。
  15. 关于sungard和博彦的笔试
  16. 【游记】NOIP2015造纸记
  17. Android 中的 AccountManager getAuthToken 问题
  18. 服务器电脑主板维修,电脑服务器主板维修
  19. 工业路由器厂家,工业路由器品牌.工业CPE厂家,工业CPE品牌
  20. 每日软件分享:去图片水印免费软件有哪些?

热门文章

  1. Python Study:GUI-Tkinter
  2. linux系统之centos/ubuntu选择
  3. 【完结】优秀的深度学习从业者都有哪些优秀的习惯
  4. 回顾2018,计划2019
  5. java如何把文件中的内容存到一个动态数组arraylist中_如何动态地向Java中的数组添加项目?...
  6. 金谷诺亚携华人文交所 经信研究·李刚:打造元宇宙数字商城
  7. 咸宁书写桂花产业-国情研究·万祥军:特色农业谋定大健康
  8. JAVA-单例模式的几种实现方式
  9. .net core将URL请求格式化为XML或JSON(网站动态生成sitemap.xml)
  10. vue+Mint-ui实现登录注册