问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

android开发中跨进程通信有几种方式

发布网友 发布时间:2022-04-20 04:54

我来回答

3个回答

热心网友 时间:2022-04-12 16:14

Android进程间通信的几种方式 定义多进程
第一:Android应用中使用多进程只有一个办法(用NDK的fork来做除外),就是在AndroidManifest.xml中声明组件时,用android:process属性来指定。
不知定process属性,则默认运行在主进程中,主进程名字为包名。
android:process = package:remote,将运行在package:remote进程中,属于全局进程,其他具有相同shareUID与签名的APP可以跑在这个进程中。
android:process = :remote ,将运行在默认包名:remote进程中,而且是APP的私有进程,不允许其他APP的组件来访问。
第二:多进程引发的问题
静态成员和单例失效:每个进程保持各自的静态成员和单例,相互独立。
线程同步机制失效:每个进程有自己的线程锁。
SharedPreferences可靠性下降:不支持并发写,会出现脏数据。
Application多次创建:不同进程跑在不同虚拟机,每个虚拟机启动会创建自己的Application,自定义Application时生命周期会混乱。
综上,不同进程拥有各自独立的虚拟机,Application,内存空间,由此引发一系列问题。
第三: 进程间通信
Bundle/Intent传递数据:
可传递基本类型,String,实现了Serializable或Parcellable接口的数据结构。Serializable是Java的序列化方法,Parcellable是Android的序列化方法,前者代码量少(仅一句),但I/O开销较大,一般用于输出到磁盘或网卡;后者实现代码多,效率高,一般用户内存间序列化和反序列化传输。
文件共享:
对同一个文件先后写读,从而实现传输,Linux机制下,可以对文件并发写,所以要注意同步。顺便一提,Windows下不支持并发读或写。
Messenger:
Messenger是基于AIDL实现的,服务端(被动方)提供一个Service来处理客户端(主动方)连接,维护一个Handler来创建Messenger,在onBind时返回Messenger的binder。
双方用Messenger来发送数据,用Handler来处理数据。Messenger处理数据依靠Handler,所以是串行的,也就是说,Handler接到多个message时,就要排队依次处理。
AIDL:
AIDL通过定义服务端暴露的接口,以提供给客户端来调用,AIDL使服务器可以并行处理,而Messenger封装了AIDL之后只能串行运行,所以Messenger一般用作消息传递。
通过编写aidl文件来设计想要暴露的接口,编译后会自动生成响应的java文件,服务器将接口的具体实现写在Stub中,用iBinder对象传递给客户端,客户端bindService的时候,用asInterface的形式将iBinder还原成接口,再调用其中的方法。
ContentProvider:
系统四大组件之一,底层也是Binder实现,主要用来为其他APP提供数据,可以说天生就是为进程通信而生的。自己实现一个ContentProvider需要实现6个方法,其中onCreate是主线程中回调的,其他方法是运行在Binder之中的。自定义的ContentProvider注册时要提供authorities属性,应用需要访问的时候将属性包装成Uri.parse("content://authorities")。还可以设置permission,readPermission,writePermission来设置权限。 ContentProvider有query,delete,insert等方法,看起来貌似是一个数据库管理类,但其实可以用文件,内存数据等等一切来充当数据源,query返回的是一个Cursor,可以自定义继承AbstractCursor的类来实现。
Socket:
学过计算机网络的对Socket不陌生,所以不需要详细讲述。只需要注意,Android不允许在主线程中请求网络,而且请求网络必须要注意声明相应的permission。然后,在服务器中定义ServerSocket来监听端口,客户端使用Socket来请求端口,连通后就可以进行通信。

热心网友 时间:2022-04-12 17:32

    在android SDK中提供了4种用于跨进程通讯的方式,Activity、Content Provider、Broadcast和Service。

    介绍

Activity可以跨进程调用其他应用程序;

Content Provider可以跨进程访问其他应用程序中的数据;

Broadcast可以向android系统中所有应用程序发送广播;

Content Provider返回的是Cursor对象,而Service返回的是Java对象,这种可以跨进程通讯的服务叫AIDL服务;

热心网友 时间:2022-04-12 19:07

在android SDK中提供了4种用于跨进程通讯的方式。
这4种方式正好对应于android系统中4种应用程序组件:
Activity、Content Provider、Broadcast和Service。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
女生学java有前途吗 女生学java能做什么工作 大三女生,某中下985软工,想尽快投简历找工作,选择cpp还是j ...真心真意谢谢你有人知道什么歌名吗_百度知... 腾讯电脑管家怎么退出登录_腾讯电脑管家退出登录方法介绍 单相电机咕咕响声的原因及解决方法 这是那个动漫人物?最好给下链接或者动漫第几集~ 如何评价《你的名字。》中的宫水三叶? 你的名字中立花龙的父母亲叫什么 宜昌市发展的怎么样 宜昌有哪些污染 安卓应用程序间的通讯 android中什么时候会选择用广播来进行线程间的通信 面试被问到android中两个子线程怎么通信,我懵了。 Android 进程间通信的几种实现方式 安卓多线程间通信和多进程之间通信有什么不同 大神救命啊 android线程间通信 handler message之类的 Android中线程与线程,进程与进程之间如何通信? Android 线程间通信有哪几种方式 续签劳动合同的流程 《员工劳动合同续签申请表》的主要内容是什么? 单位续签合同申请书的程序是怎样的 劳动合同续签申请需要注意什么呢 如何填写续签合同的申请? 劳动合同续签申请需要注意哪些问题 合同到期之后,假如还想在这个单位工作,该怎么申... 合同到期续签合同申请书怎么写 小米手表无法输入密码? 小米手表出现start界面死机小米手表出现start界面死机 小米color手表黑屏震动 红米手表屏幕锁定无法解锁 Android服务器通信的几种方式详解 Android子线程和子线程之间的通信是怎样的 android HttpGet 另开线程获取网络数据问题 Android主线程如何向分线程发送消息 android UI线程和子线程的几种交互方式 Android可以让主线程在其他子线程执行完后再执行吗... Android进程与线程区别 Android中的线程与进程之间的关系简单解释 乘飞机安全的注意事项有哪些? 坐飞机需要注意什么 坐飞机需要注意些什么? 乘坐飞机需要注意哪些事项 坐飞机应该注意什么? 乘坐飞机时应该注意些什么? 乘坐飞机注意事项及携带物品分别是? 乘坐飞机需要注意什么? 乘坐飞机有什么注意事项 明天就要第一次坐飞机了,该注意些什么 乘坐飞机注意 乘坐飞机时要注意哪几方面?
  • 焦点

最新推荐

猜你喜欢

热门推荐