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四个组件的跨进程通信相关推荐

  1. Android组件化跨进程通信框架Andromeda解析

    关于组件化 随着项目结构越来越庞大,模块与模块间的边界逐渐变得不清晰,代码维护越来越困难,甚至编译速度都成为影响开发效率的瓶颈. 组件化拆分是比较常见的解决方案,一方面解决模块间的耦合关系.将通用模块 ...

  2. 爱奇艺开源的组件化跨进程通信解决方案

    /   今日科技快讯   / 近日,特斯拉首席执行官埃隆·马斯克来到中国上海,亲自向客户交付中国制造的Model 3,并透露了有关Model Y的更多信息,特斯拉股价继续保持着近三个月来的飙涨势头,目 ...

  3. 利用Messenger跨进程通信

    在进行跨进程通信的时候,可能很多开发者一开始想到的就是AIDL.AIDL,中文名称是android接口描述语言,是android系统中用于进行跨进程通信必须了解的.至于如何生成远程对象进行AIDL通信 ...

  4. 【朝花夕拾】Android跨进程通信总结篇

    前言 原文:https://www.cnblogs.com/andy-songwei/p/10256379.html 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一. ...

  5. 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇

    前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/10256379.html],谢谢! 只要是面试高级工程师岗位,Android跨进程通信就是最受面 ...

  6. 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇...

    前言 原文:https://www.cnblogs.com/andy-songwei/p/10256379.html 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一. ...

  7. Android IPC 进程进程间通信或跨进程通信

    Android IPC 机制 老话长谈,趁现在有时间对IPC做一个具体的总结. IPC是Inter-Process Communication的缩写,含义就是进程间通信或者跨进程通信,是指两个进程之间 ...

  8. Android跨进程通信Binder机制与AIDL实例

    文章目录 进程通信 1.1 进程空间划分 1.2 跨进程通信IPC 1.3 Linux跨进程通信 1.4 Android进程通信 Binder跨进程通信 2.1 Binder简介 2.2 Binder ...

  9. 【Binder】Android 跨进程通信原理解析

    前言 在Android开发的过程中,用到跨进程通信的地方非常非常多,我们所使用的Activity.Service等组件都需要和AMS进行跨进程通信,而这种跨进程的通信都是由Binder完成的. 甚至一 ...

最新文章

  1. JAVA 动态代理学习记录
  2. 跟我一起学perl系统管理脚本 第3课
  3. 如何安装docker-compose
  4. 【数据分析】Python数据分析指南(全)
  5. android blockcanary 原理,blockCanary原理
  6. 二十四种设计模式:装饰模式(Decorator Pattern)
  7. Oracle工具之--ASM与文件系统及跨网络传输文件
  8. spring源码分析第三天------spring核心IOC容器和依赖注入原理
  9. 基于Java+SpringBoot+vue+node.js实现自行车租赁平台管理系统
  10. Android学习之PhotoView在Eclipse上的使用
  11. python中字典的键是唯一的吗_Python怎么通过字典的键和值做一个登录程序?
  12. Windows Server 2003 AD域升级至Windows Server 2008 R2实战案例
  13. 零基础学python知乎-零基础人员可以学习python吗?|Python培训基础教程
  14. linux返回上一步命令
  15. 隐藏应用图标的多种方式
  16. Notes 20180311 : String第三讲_深入了解String
  17. 搜图网vvic商品详情api接口
  18. 2017CVPR NID-SLAM:基于归一化信息距离的鲁棒单目SLAM系统
  19. java add event handler_最佳的addEvent事件绑定是怎样诞生的
  20. 搜狗浏览器,添加自定义搜索引擎~

热门文章

  1. Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换
  2. pipenv 虚拟环境新玩法
  3. python入门学习:4.if语句
  4. 如何学习Linux性能优化?
  5. JS实现sleep()方法
  6. mybatis02--增删改查
  7. 网易2017校招编程:优雅的点
  8. 【转】解决多文件编译中连接错误 multiple definition of*****
  9. Day 1 二分搜索训练总结
  10. UITableViewCell高亮时其子视图的状态修改