android四个组件的跨进程通信
Android四大组件(Activity,service,broadcast,Content Provider)跨进程通信相信在android项目中进程用到,此处将一一做以说明以及总结.
1.简括:
首先需要看四大组件都继承了什么,实现了什么,也就知道了它们的用途以及作用.
public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory2,Window.Callback, KeyEvent.Callback,OnCreateContextMenuListener, ComponentCallbacks2,Window.OnWindowDismissedCallback, WindowControllerCallback,AutofillManager.AutofillClientpublic abstract class Service extends ContextWrapper implements ComponentCallbacks2 *****public class ContextThemeWrapper extends ContextWrapper从activity和service看出来,它们都继承自context实现不同的接口,实现决定了它们的功能.
2.Activity:界面显示组件,且实现了很多Ui交互接口.
(1)不同app跨进程调用主要通过startActivity. eg:OneMainActivity调用AnotherMainActivity.下面只做简单说明.需要运行验证的可以copy代码进行运行校验.
package com.example.oneactivity; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.Button;public class OneMainActivity extends Activity {Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_one_main);button = (Button)findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubIntent intent = new Intent();intent.setAction("com.ysfl.otherActivity");//此处设置需要起动app的action.Log.d(this.getClass().getName(),"I'm OneMainActivity onclick to start anotherActivity");startActivity(intent);//跨进程调用其它应用}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_one_main, menu);return true;}@Overrideprotected void onPause(){super.onPause();Log.d(this.getClass().getName(),"I'm OneMainActivity onPause");}@Overrideprotected void onStop(){super.onStop();Log.d(this.getClass().getName(),"I'm OneMainActivity onStop");}@Overrideprotected void onDestroy(){super.onDestroy();Log.d(this.getClass().getName(),"I'm OneMainActivity onDestroy");} }
OneMainActivity的xml文件不做说明,它只是一个简单的配置.AnotherMainActivity的代码和配置文件如下.
package com.example.anotheractivity;import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.widget.Toast;public class AnotherMainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_another_main);Log.d(this.getClass().getName(),"I'm AnotherMainActivity onCreate");}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_another_main, menu);return true;}@Overrideprotected void onPause(){super.onPause();Log.d(this.getClass().getName(),"I'm AnotherMainActivity onPause");}@Overrideprotected void onStop(){super.onStop();Log.d(this.getClass().getName(),"I'm AnotherMainActivity onStop");}@Overrideprotected void onDestroy(){super.onDestroy();Log.d(this.getClass().getName(),"I'm AnotherMainActivity onDestroy");} }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.anotheractivity"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="17" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.example.anotheractivity.AnotherMainActivity"android:label="@string/app_name" ><intent-filter> <!-- 此处的action是其它应用需要起动的action --><action android:name="com.ysfl.otherActivity" /><category android:name="android.intent.category.DEFAULT" /><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application> </manifest>
运行结果如下图:
3.Service
(1)activity到service跨进程有两种方式:startService和bindService
a.startService单向传递数据
b.bindService可通过binder实现数据的交互以及监听。
(2)service生命周期如下:
startService:onCreate()->onStartCommand()-----service running -----onDestroy()
bindService:onCreate()->onBind()----------service running -------onUnbind()->onDestroy()
service总结:当service已经被oncreate后,就不会再次oncreate,因为service只有一个,不会被重复创建.当被bind后也不会进行再次bind,此时binder已经存在于缓存区.
(3)关于activity跨进程调用service的例子可以直接参考:Android进程间通信-AIDL-经典的Hello World诠释
后续待续..........
转载于:https://www.cnblogs.com/syyh2006/p/9187676.html
android四个组件的跨进程通信相关推荐
- Android组件化跨进程通信框架Andromeda解析
关于组件化 随着项目结构越来越庞大,模块与模块间的边界逐渐变得不清晰,代码维护越来越困难,甚至编译速度都成为影响开发效率的瓶颈. 组件化拆分是比较常见的解决方案,一方面解决模块间的耦合关系.将通用模块 ...
- 爱奇艺开源的组件化跨进程通信解决方案
/ 今日科技快讯 / 近日,特斯拉首席执行官埃隆·马斯克来到中国上海,亲自向客户交付中国制造的Model 3,并透露了有关Model Y的更多信息,特斯拉股价继续保持着近三个月来的飙涨势头,目 ...
- 利用Messenger跨进程通信
在进行跨进程通信的时候,可能很多开发者一开始想到的就是AIDL.AIDL,中文名称是android接口描述语言,是android系统中用于进行跨进程通信必须了解的.至于如何生成远程对象进行AIDL通信 ...
- 【朝花夕拾】Android跨进程通信总结篇
前言 原文:https://www.cnblogs.com/andy-songwei/p/10256379.html 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一. ...
- 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇
前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/10256379.html],谢谢! 只要是面试高级工程师岗位,Android跨进程通信就是最受面 ...
- 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇...
前言 原文:https://www.cnblogs.com/andy-songwei/p/10256379.html 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一. ...
- Android IPC 进程进程间通信或跨进程通信
Android IPC 机制 老话长谈,趁现在有时间对IPC做一个具体的总结. IPC是Inter-Process Communication的缩写,含义就是进程间通信或者跨进程通信,是指两个进程之间 ...
- Android跨进程通信Binder机制与AIDL实例
文章目录 进程通信 1.1 进程空间划分 1.2 跨进程通信IPC 1.3 Linux跨进程通信 1.4 Android进程通信 Binder跨进程通信 2.1 Binder简介 2.2 Binder ...
- 【Binder】Android 跨进程通信原理解析
前言 在Android开发的过程中,用到跨进程通信的地方非常非常多,我们所使用的Activity.Service等组件都需要和AMS进行跨进程通信,而这种跨进程的通信都是由Binder完成的. 甚至一 ...
最新文章
- JAVA 动态代理学习记录
- 跟我一起学perl系统管理脚本 第3课
- 如何安装docker-compose
- 【数据分析】Python数据分析指南(全)
- android blockcanary 原理,blockCanary原理
- 二十四种设计模式:装饰模式(Decorator Pattern)
- Oracle工具之--ASM与文件系统及跨网络传输文件
- spring源码分析第三天------spring核心IOC容器和依赖注入原理
- 基于Java+SpringBoot+vue+node.js实现自行车租赁平台管理系统
- Android学习之PhotoView在Eclipse上的使用
- python中字典的键是唯一的吗_Python怎么通过字典的键和值做一个登录程序?
- Windows Server 2003 AD域升级至Windows Server 2008 R2实战案例
- 零基础学python知乎-零基础人员可以学习python吗?|Python培训基础教程
- linux返回上一步命令
- 隐藏应用图标的多种方式
- Notes 20180311 : String第三讲_深入了解String
- 搜图网vvic商品详情api接口
- 2017CVPR NID-SLAM:基于归一化信息距离的鲁棒单目SLAM系统
- java add event handler_最佳的addEvent事件绑定是怎样诞生的
- 搜狗浏览器,添加自定义搜索引擎~