首页
BOB网页客户端
BOB体育官网登陆
BOB注册首页

BOB体育官网登陆

你的位置:BOB(中国)官方入口-BOB投注网页版 > BOB体育官网登陆 > BOB体育官网登陆 多进程通信手段以及带一系列题目

BOB体育官网登陆 多进程通信手段以及带一系列题目

发布日期:2021-11-21 07:53    点击次数:56

BOB体育官网登陆

本文转载自微信公多号「Android开发程」,作者Android开发程。转载本文请有关Android开发程公多号。

序言

今天讲解下:多进程通信手段以及带的题目,方便在项现在中遇到题目及时的处理;

一、Android中多进程详解

1、定义

BOB体育官网登陆Android的多进程通信即IPC是指两个进程之间进走数据交换; 进程清淡指一个实走单元,在PC和移动设备中指一个程序或行使; 最浅易的情况下,Android行使中只有一个进程,包含一个线程,即主线程,也叫作UI线程,只能在此线程更新操作UI; 清淡情况下是不必要多进程的,但是当行使必要更多的内存或者某些稀奇的Module或稀奇的需求必要运走在多进程条件下; BOB体育官网登陆

2、开启多进程

Android中开启多进程只有一栽手段,就是在AndroidManifest.xml中注册Service、Activity、Receiver、ContentProvider时指定android:process属性,例如:

<service     android:name=".MyService"     android:process=":remote"> </service> <activity     android:name=".MyActivity"     android:process="com.test.remote2"> </activity> 
BOB体育官网登陆

吾们为MyService和MyActivity指定的android:process属性值有所分别,它们的区别如下:

BOB体育官网登陆:remote:以:起头是一栽简写,体系会在现在进程名前附件现在包名,完善的进程名为:com.test:remote,同时以:起头的进程属于现在行使的私有进程,其它行使的组件不及和它跑在联相符进程; com.test.remote2:这是完善的命名手段,不会附添包名,其它行使倘若和该进程的ShareUID、签名相通,则能够和它跑在联相符个进程,实现数据共享; BOB体育官网登陆

3、Android中的多进程通信手段

多进程通信手段主要有以下几栽,它们之间各有优弱点,可按照行使场景选择选择:

BOB体育官网登陆AIDL:功能重大,声援进程间一对多的实时并发通信,并可实现RPC; Messenger:声援一对多的串走实时通信,AIDL的简化版本; Bundle:四大组件的进程通信手段,只能传输Bundle声援的数据类型; ContentProvider:重大的数据源访问声援,主要声援CRUD操作,一对多的进程间数据共享,例如吾们的行使访问体系的通讯录数据; BroadcastReceiver:即广播,但只能单向通信,授与者只能被动的授与新闻; 文件共享:在非高并发情况下共享浅易的数据; Socket:始末网络传输数据; BOB体育官网登陆

二、多进程带的题目

1、静态变量失效BOB体育官网登陆

在一个Activity中新建一个静态变量TEST_STATIC,并在RemoteActivity1中的onStartOtherRemoteActivity手段中自添,之后启动RemoteActivity2,BOB体育官网登陆并在2中打印TEST_STATIC的值;

public static int TEST_STATIC = 21; public void onStartOtherRemoteActivity; } 效果: // RemoteActivity1 log E/RemoteActivity1: onStartOtherRemoteActivity: 22 // RemoteActivity2 log E/RemoteActivity2: onCreate: 21 

并不相通的数值表明在多进程中静态变量是失效的同样的由于静态变量带的题目是单例模式的失效;

因为就是多进程时Android为其他进程分配了一个新的虚拟机导致分别的虚拟机在内存上有分别的内存地址当在新的进程访问变量时访问的其实是这个类在新的虚拟机中的副本也就是相等于在:remote和.remote中各有一个RemoteActivity1类而.remote访问的谁人副本中的TEST_STATIC是异国进走自添操作的因此照样会打印出21的初起数值而在:remote中是自添过的22;

单例模式也是同样的注释当在另一个进程中访问单例类时在此进程中其实并异国进走初起化因此才会失效;

2、线程同步机制失效

内心上跟静态变量相通在一个进程锁住的是副本的对象而在另一个副本中内存都分别因此肯定是无效的;

3、SharedPreferences郑重性降低

SharedPreferences不声援两个进程同时往实走写操作否则会导致肯定几率的数据丢失;

SharedPreferences的底层是始末读写XML文件实现的并发写很能够导致题目并发读写都不及保证不会出题目;

4、Application会被创建多次

当一个组件跑在一个新的进程中时体系给新的进程分配一个新的虚拟机就相等于行使又一次的重新启动Application行为行使基础肯定也会被重新创建;

新建Application类继承自Application并在onCreate手段中输出现在进程的PID:

public class LApplication extends Application {     private static final String TAG = "LApplication";     @Override     public void onCreate;     } } 

当挨次开启进程后输出如下:

// Main E/LApplication: onCreate: 16031 // RemoteActivity1 E/LApplication: onCreate: 16127 // RemoteActivity2 E/LApplication: onCreate: 16202 

Application被创建多次带的题目是有些时候会必要在Application中初起化些倚赖但是多进程就会随着Application的创建而重复初起化能够在Application中竖立一些条件跳过重复初起化片面;

// 按照pid获取进程名 private String getAppName;             return null;         }     }     return null; } 

始末PID获取进程名与包名做对比只有跟包名相反时才做一些初起化做事;

总结

多进程实现今天异国讲以后会讲解的;

多进程不难的难的在于要克服难得BOB体育官网登陆制服本身;

BOB体育官网登陆

Powered by BOB(中国)官方入口-BOB投注网页版 @2013-2021 RSS地图 HTML地图