Android IPC机制

news2024/11/28 6:31:34

本文首发于个人博客 “胖蔡叨叨叨”,更多相关信息可点击查看《Android IPC机制》​​​​​​​

IPC

IPC(Inter Process Communication) 进程间通信,是指系统中运行的不同进程间的信息交互过程。Android IPC通常用于应用间、或同应用不同进程间的数据通信。

IPC

常见的Android IPC通信方式如下:

  • AIDL
  • Messager
  • ContentProvider
  • Socket
  • 文件共享
  • Intent数据传递

IPC不是Androi所特有的,对于任一操作系统而言都有属于它的IPC机制,如windos的剪切板、管道等。对于Android来说,其本身是基于Linux内核实现的一款移动操作系统,但其IPC并未完全集成Linux操作系统,而是有其独特的进程间通信的方式Binder,Binder也是Android的一大核心机制。

多进程

Andorid 支持给应用开启多个进程,其实现方法很简单,只需要我们在清单配置文件Manifest.xml中给注册的四大组件添加进程配置属性:

...
<activity andorid:name=".MainActivity"
          andorid:process=":remote"></activity>
...

需要注意的是,进程名以”:”开头的进程为当前应用的私有进程,其他应用不可与其运行在同一个京城中,而不是以”:”开头的进程属于全局进程,可通过shareUID方式与其他应用共享一个dalivk虚拟机(shareUId要求mainfest.xml配置相同的shareUId,并使用相同的签名)

多进程的烦恼

因为Android中会为每一个进程创建一个单独的虚拟机,不同的虚拟机的内存分配地址也不同,这就导致了不同进程的内存无法通过常规途径进行分享。会产生诸多如下类问题:

  • 静态成员和单例模式失效
  • 线程无法同步
  • sharepreferences数据无法保证实时更新
  • Appliction类会被多次创建

Serializable和Parcelable

在实现数据间传递的时候,我们会接触到数据的序列化。序列化是数据持久化存储、传输的基础实现,而Android则是通过Serializable和Parcelable接口来实现对象的序列化的。其中Serializable是java提供的而一个序列化接口,只需要我们实现这个序列化接口,并在类的声明中添加一个序列化标识即可。

public class User implements Serializable {
     private static final long serialVersionUID = 127339249328490098;
     public int id;
     public String name;
     ....
}


User user = new User('hfcai',12);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("cache.txt"));
out.close();  // 通过ObjectOutputStream实现序列化过程

// 反序列化
ObjectInputStream in = new ObjectInputStream(new FileInputStream("cache.txt"));
User newUser = (User)in.readObject();
in.close;

Android自己也提供了一种序列化的接口Parcelable,通过实现Parcelable接口的实例对象,可通过Intent、Binder传递。

public class User implements Parcelable {
    public int id;
    public String name;
    public Book book;


   public User(String name,int id){
      this.name = name;
      this.id = id;
  }

  public int describeContents(){
      return 0;
  }

  public void writeToParce(Parcel out,int flags){
        out.writeInt(id);
        out.writeString(name);
        out.writeParcelable(book,0);
  }


  public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>(){
          public User createFromParcel(parcel in){
             return new User(in);
         }

        public User[] newArray(){
            return new User[size];
       }
  };

  private User(Parcel in){
      id = in.readInt();
      name = in.readString();
      book = in.readParcelable(Thread.currentThread().getCOntextClassLoader());
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/88305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3分钟读懂数据可视化如何帮助企业智慧管理,提升管理水平

随着大数据时代的到来&#xff0c;企业管理的决策越来越倚重数据指标&#xff0c;通过数据指标了解公司运作的情况&#xff0c;产品生产销售情况&#xff0c;收入与支出情况等等&#xff0c;更大的作用是对商业趋势预测提供了决策依据&#xff0c;使公司提前布局未来&#xff0…

Q-Automation:基于ATX的自动化测试管理软件

Softing Q-Automation是基于ATX的自动化测试管理软件&#xff0c;用于测试电子控制单元&#xff08;ECU&#xff09;。该软件支持诊断协议层测试和诊断功能测试&#xff0c;并且只需填写Excel表格&#xff0c;即可实现半自动化测试需求&#xff0c;从而缩短了用户的测试周期。同…

2022年终Java编程技术总结

目录 00 总体脑图 第一章、基础篇 01 计算机基础 ## 1.1 操作系统 1.1.1 基本知识 略 1.1.2 常见Linux命令 目录文件内容搜索系统类网络权限cdcp/scpvi/vimfind: find . -name xxkillnetstat -anchmodlsmvcatgrep: ps -efgrep xxlsof: lsof-i:portmkdirrmtailwhereistopp…

web前端期末大作业 ——电影主题介绍 你好,李焕英 ——html+css+javascript网页设计实例

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 精彩专栏推荐&#x1f4…

Win11电脑蓝屏怎么办?Win11电脑蓝屏的修复方法

Win11电脑蓝屏怎么办&#xff1f;电脑蓝屏是最为常见的系统故障问题之一&#xff0c;当电脑出现蓝屏时一般分为可以开机以及无法开机的情况&#xff0c;针对这两种情况&#xff0c;下面小编分别准备了对应的解决方法&#xff0c;有需要的朋友们欢迎收藏慢慢看哦。 方法一&#…

家居类小红书达人投放总结,kol执行策略

在小红书平台上&#xff0c;许多品牌方都做了达人投放&#xff0c;但结果却反响平平&#xff0c;最后才发现是达人挑选出了问题&#xff0c;而发现这个问题的代价就是错失先机&#xff0c;也耗费大量成本来试错&#xff0c;今天为大家分享一下小红书达人投放总结以及超硬干货。…

多线程安全问题原理和4种解决办法

摘要&#xff1a;多线程访问了共享的数据,会产生线程安全问题。本文分享自华为云社区《多线程安全问题原理和解决办法Synchronized和ReentrantLock使用与区别》&#xff0c;作者&#xff1a;共饮一杯无。 线程安全问题概述 卖票问题分析 单窗口卖票一个窗口(单线程)卖100张票…

大数据学习 -- 利用Java API 将文件写入HDFS

利用API写入文件写入HDFS文件&#xff08;1&#xff09;将数据直接写入HDFS文件&#xff08;2&#xff09;将本地文件写入HDFS文件写入HDFS文件 类似于HDFS Shell里的hdfs dfs -put命令在net.zwh.hdfs包里创建WriteFileOnHDFS类 &#xff08;1&#xff09;将数据直接写入HDFS…

【记录】ChatGPT|注册流程、使用技巧与应用推荐(更新至2022年12月14日)

昨天&#xff0c;2022年12月13日&#xff0c;在下午和晚上&#xff0c;ChatGPT 就开始因为请求过多而写到一半就崩溃&#xff0c;出现network error&#xff0c;可见它的关注度确实是越来越可观了。 正好最近世界杯&#xff0c;有博客活动&#xff0c;干脆也总结一下 ChatGPT 目…

大白话讲懂word2vec原理和如何使用

前言 做自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;这个领域的小伙伴们肯定对word2vec这个模型很熟悉了&#xff0c;它就是一种最为常见的文本表示的算法&#xff0c;是将文本数据转换成计算机能够运算的数字或者向量。在自然语言处理领…

【Docker】Dockerfile从概念介绍到快速上手编写案例实战

本期目录1. Dockerfile介绍1.1 Dockerfile的重要性1.2 构建三步骤2. Dockerfile构建过程2.1 Dockerfile内容基础2.2 Dockerfile执行流程2.3 总结3. Dockerfile常用保留字指令3.1 Dockerfile常用保留字一览3.2 保留字讲解4. 案例演示-自定义CentOS镜像4.1 前期准备4.2 编写Docke…

黑白图片怎样上色?教你如何给黑白照片上色

平时我们在网上浏览照片时&#xff0c;就会经常看到一些黑白色的照片。自从前段时间的复古风出现之后&#xff0c;很多小伙伴都会给自己拍摄的一些照片加上黑白滤镜&#xff0c;让原本彩色的照片变成了黑白色的&#xff0c;那大家知道黑白照片怎么变成彩色照片吗&#xff1f;今…

xxljob 自动清理日志的业务逻辑,以及涉及到的文件

目录 1 需求2 实现3 JobLogFileCleanThread1 需求 xxljob定时任务,会产生很多的日志文件,那么他是如何自动清除的呢? 2 实现 我们自己的项目集成了xxljob之后,会在yml里面有一个配置 ### 执行器日志文件保存天数 [选填] : 过期日志自动清理, # 限制值大于等于3时生效; …

物联网通信技术第7章 自组织网络(非常全,持续更新)

目录 知识点要求 7.1自组织网络概述 7.1.1 自组织网络的定义&#xff08;掌握&#xff09; 7.1.2 自组织网络的特点 &#xff08;理解&#xff09; 7.1.3 自组织网络的应用 7.2 自组织网络的体系结构&#xff08;了解&#xff09; 7.2.1 节点结构 7.2.2 自组织网络的网…

微信小程序开发—入门到跑路(二)

1、学习目标 知识点名称知识点内容难度系数要求程度模板语法数据绑定、事件绑定、条件渲染、列表渲染2星掌握WXSS样式WXSS3星掌握配置操作全局配置、TabBar配置、页面配置、3星掌握网络请求和案例网络数据请求、本地生活案例3星掌握文章目录1、学习目标2、模板语法2.1、数据绑…

AVS-代码路径说明

训练 1 config.py里面有backbone的路径,这里最好写在外面&#xff0c;写成绝对路径 不然每个算法都要放如下三个与训练模型&#xff0c;会很占地方vggishxxx.pth resnetxxx.pth pvt_v2_xxx.py AVS/AVSBenchmark1/avs_ms3/config.py 本来pretrained_backbones/xxx.pth文件在AVSB…

【C++】STL——list的常用接口

list的常用接口 文章目录list的常用接口一、list的介绍二、list的使用1.list的构造2.迭代器的使用2.1.begin和end2.2.rbegin和rend2.3.范围for2.4.迭代器的分类3.list的元素访问函数3.1.front和back4.list的容量操作函数4.1.empty4.2.size和max_size5.list修改的相关函数5.1.pu…

内卷起来,2023年外贸B2B企业怎么通过独立站吸引客户的注意

从国外疫情解封后&#xff0c;中国在2022年的最后一个月也解封了&#xff0c;我们努力了三年&#xff0c;现在不再查核酸、健康码&#xff0c;多家航空公司重新开通了国际航班。对许多外贸公司来说&#xff0c;是“外贸春天”的到来。那么即将到来的2023年&#xff0c;外贸B2B企…

十三、JavaScript——类型转化

一、类型转化 1 定义 类型转化&#xff1a;指将一种数据类型转化为其他的数据类型 - 指将其他类型转化为&#xff08;字符串、数值、布尔值&#xff09; 转化为字符串、调用toString()方法将其他类型转化为字符串 调用String&#xff08;&#xff09;函数将其他类型转化为字…

彻底理解并解决服务器出现大量TIME_WAIT

首先我们说下状态 TIME_WAIT 出现的原因 TCP的新建连接&#xff0c;断开连接的流程和各个状态&#xff0c;如下图所示 由上图可知&#xff1a;TIME_WAIT 是主动断开连接的一方会出现的&#xff0c;客户端&#xff0c;服务器都有可能出现 当客户端主动断开连接时&#xff0c;发…