多进程的一些注意事项
1.如何开启:
给四大组件(Activity、Service、Receiver、ContentProvider)在AndroidManifest.xml中指定"android:process"属性可以在应用内实现多进程。
如果进程名以":"开头,说明该进程属于私有进程,其他应用的组件不可以和它跑在同一个进程中;
如果进程名不以":"开头,则属于全局进程,其它应用通过ShareUID方式可以和它跑在同一个进程中。
2.注意两个进程之间的数据:
Android为每个应用分配了一个独立的虚拟机,或者可以说每个进程都有一个独立的虚拟机,不同的虚拟机在内存分配上有不同的内存地址,这就导致不同的虚拟机访问同一个类的对象会产生多份副本。
所以,所有运行在不同进程中的四大组件,只要他们之间通过内存来共享数据,都会共享失败。
一般来说,使用多进程会有以下影响:
<1>.静态成员和单例模式完全失效
<2>.线程同步机制完全失效(因为都不是一块内存了,所以不同进程锁都不是同一个对象)
<3>.SharePreferences的可靠性下降(因为SharePreferences不支持两个进程同时进行写操作,会导致一定几率的数据丢失,这是因为SharePreferences底层是通过读写xml来实现的)
<4>.Application会多次创建
3.进程间通信
进程获取的内存空间是一块抽象的内存,然后会映射到实际的某一块物理内存,因此,每个进程都无法访问其他进程在内存里面数据。
不同进程之间的通信,就意味着在两块不同的物理内存间传递数据
当然,原生的数据,比如int或者String数据都是可以传递的,但是对象数据是不可以的
在Android中,最有特色的进程间通信方式就是Binder了,还可以支持Socket(既可以在两个设备之间Socket通信,也可以在一个设备的不同进程间通信)。
1 SharedPreferences myPrefs = context.getSharedPreferences(MY_FILE_NAME, Context.MODE_MULTI_PROCESS | Context.MODE_PRIVATE);
一旦我们设置了这个Flag,每次调用Context.getSharedPreferences 的时候系统会重新从SP文件中读入数据,因此我们在使用的时候每次读取和存入都要使用Context.getSharedPreferences 重新获取SP实例。即使是这样,由于SP本质上并不是多进程安全的,所以还是无法保证数据的同步,因此该方法我们并没有使用,我们也不推荐使用。
由于SP不是多进程安全的,可以使用一个多进程安全的开源项目:Tray (但是需要的minsdk是15)
1 // create a preference accessor. This is for global app preferences. 2 final AppPreferences appPreferences = new AppPreferences(getContext()); // this Preference comes for free from the library 3 // save a key value pair 4 appPreferences.put("key", "lorem ipsum"); 5 6 // read the value for your key. the second parameter is a fallback (optional otherwise throws) 7 final String value = appPreferences.getString("key", "default"); 8 Log.v(TAG, "value: " + value); // value: lorem ipsum 9 10 // read a key that isn't saved. returns the default (or throws without default) 11 final String defaultValue = appPreferences.getString("key2", "default"); 12 Log.v(TAG, "value: " + defaultValue); // value: default
(3).ContentProvider是Android官方支持的多进程安全的,参考:Android应用程序组件Content Provider应用实例
注意<1>:Messager只能串行处理消息,如果要处理大量的消息的话,还是用aidl
<2>:在AIDL文件中,并不是所有的数据类型都是可以使用的,AIDL只支持以下数据类型
(1).基本数据类型(int、long、char、boolean、double等)
(2).String和CharSequence
(3).List:只支持ArrayList,里面的每个元素都必须能够被AIDL支持
(4).Map:只支持HashMap,里面的每个元素都必须能够被AIDL支持,包括key和value
(5).Parcelable:所有实现了Parcelable接口的对象
(6).AIDL:所有的AIDL接口本身也可以在AIDL文件中使用
转载于:https://www.cnblogs.com/wufeng0927/p/5304448.html
多进程的一些注意事项相关推荐
- Android 面试要点
整个面试题分为三个部分:Java.Android和项目经验. 1 Java技术 1.1 Java基础 对抽象.继承.多态的理解 泛型的作用及使用场景 枚举的特点及使用场景 线程sleep和wai ...
- Android面试攻略
文章背景 在外界看来IT是一个"高薪"的行业,都羡慕不已,熟不知IT也是一个苦逼的行业,每天加班加点,时刻用生命在写代码啊,导致许多程序猿和程序媛们都找不到对象,好不容易有个家庭的 ...
- 多线程和多进程的差别(小结)
非常想写点关于多进程和多线程的东西,我确实非常爱他们.可是每每想动手写点关于他们的东西,却总是求全心理作祟,始终动不了手. 今天最终下了决心,写点东西,以后能够再修修补补也无妨. 一.为何须要多进程( ...
- php 多进程 返回值,php多进程
软件简介 php基于pcntl扩展实现的多进程框架. 有以下几种优点: 1.子进程数量的控制 2.钩子形式的运行子进程,方便代码实现 3.3种不同的方式导入任务(数组输入.运行次数输入.动态加载) 4 ...
- 浅谈多进程多线程的选择(转)
关于多进程和多线程,教科书上最经典的一句话是"进程是资源分配的最小单位,线程是CPU调度的最小单位",这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了 ...
- 一文看懂Python多进程与多线程编程(工作学习面试必读)
进程(process)和线程(thread)是非常抽象的概念, 也是程序员必需掌握的核心知识.多进程和多线程编程对于代码的并发执行,提升代码效率和缩短运行时间至关重要.小编我今天就来尝试下用一文总结下 ...
- python列表批量 修改_python实现多进程按序号批量修改文件名的方法示例
本文实例讲述了python实现多进程按序号批量修改文件名的方法.分享给大家供大家参考,具体如下: 说明 文件名命名方式如图,是数字序号开头,但是中间有些文件删掉了,序号不连续,这里将序号连续起来,总的 ...
- python启动多个进程_Python程序中的进程操作--—--开启多进程
Python程序中的进程操作-----开启多进程 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创 ...
- 【原】webpack--loaders,主要解释为什么需要loaders和注意事项
Why需要loaders? webpack开箱即用只支持JS和JSON两种文件类型,但是比如css.less,还有目前市场上比较新的语法糖jsx,怎么处理呢? 通过Loaders去支持其他文件类型并且 ...
最新文章
- java jdk 环境变量配置(window 10 系统)
- python【蓝桥杯vip练习题库】ADV-181质因数2(短除法)
- 时结果 hive_Hive优化
- 个人信息管理系统代码_Thymeleaf+SpringBoot+Mybatis实现的易游网旅游信息管理系统...
- Java Short类hashCode()方法及示例
- 当年要是早知道这4步框架,我就不会为数据管理发愁了
- micropython esp32驱动舵机_PCA9685舵机控制板与MicroPython-ESP32-1Z实验室
- 使用xUnit测试验证属性
- Oracle MERGE用法
- IT职场人生系列之十九:危险职业(中)
- linux 用户管理、权限管理
- 计算机二进制教案教程,计算机的二进制教案.doc
- RFID射频识别技术
- Layer2 DAO基础协议Metis与IDO平台Paid Network达成战略合作
- 回归方程有效性的检查
- while 循环进入死循环?
- 向身边优秀的人学习,让自己变得优秀
- NYOJ-71 独木舟上的旅行
- ios开发中各种版本、设备的区分的代码
- Unity 水体浮力的实现
热门文章
- 万门大学倒闭了,童哲连夜跑路了
- 名校华人教授专门设局诈骗中国留学生,4年吸金超百万美元,连亲戚也没放过...
- 橡鹭科技获源码资本亿元融资,美团原核心高管加盟,发力服务机器人
- 「思想钢印」成真!33位中美科学家最新成果:用光成功改变大脑认知
- 写论文前先交提纲,没准儿提前就被顶刊接收!Nature:论文还没写,就知道是好研究...
- 这年头连人用脑机接口信号都能无线传输了,瘫痪者可在家轻松上网看视频
- 清华《摸鱼学导论》开课啦!1000多学子在线摸鱼,开课老师为大一新生
- 3D打印火箭发动机真被做出来了!首次地面全周期点火实测,发射报价不到猎鹰9的五分之一...
- 英特尔90亿美元卖掉「起家业务」,SK海力士接盘
- Scikit-learn新版本发布,一行代码秒升级