Android必备知识点之IPC(进程间通信/跨进程通信)

1.进程和线程的区别:

进程一般指一个执行单元,在手机上就体现为一个程序或一个应用。一个进程可以包含多个线程。一般情况下,一个进程中可以只有一个线程,主线程(UI线程),但大多数情况,例如联网操作,则开启多个线程做耗时操作。

2.IPC场景:

1>增加应用可使用的内存空间(Android对单个应用所使用的最大内存空间做了限制)

2>需要另外开启进程做一些工作

3>通过跨进程获取数据,例如通讯录数据

首先关注一些应用内部的多进程
1>在AndroidMenifest中指定:android:process=”xxx”,若没有指定,则默认进程名就是包名

2>通过JNI在native层去fork一个新的进程。(特殊,我也不会)

只研究第一个,可以通过shell来查看进程:adb shellps

强调一点,”:xxx”开头的进程属于当前应用的私有进程,其他应用组件不可以和它在同一个进程中,进程名不以”:”开头的,属于全局进程

3.多进程模式的运行机制

若在工具类中创建静态全局变量,A进程中更改了变量值,B进程中不会得到被更改的变量值,也就是说不通进程间数据不共享。所有运行在不同进程中的四大组件,只要它们之间通过内存共享数据,都会共享失败。

原因:Android为每一个应用分配了一个独立的虚拟机,或者说为每个进程都分配了一个独立的虚拟机,不同虚拟机在内测分配上有不同的地址空间,导致在不同的虚拟机中访问同一个类的对象会产生许多分副本。

Serializable 和Parcelable的区别:
Serializable是Java中的序列化接口,使用简单但是开销大,序列化和反序列化过程需要大量的I/O操作.Parcelable是Android中的序列化方式,效率高,但是使用麻烦,主要用在内存序列化上,一般讲对象序列化后通过网络传输,过程就会稍显负责,可以用Serializable,其他情况推荐使用Parcelable

4.Android中IPC的方式

1>Binder:(AIDL)
是Android中的一个类,它实现了IBinder接口。从Android应用层来说,Binder是客户端和服务端进行通信的媒介,当bindService的时候,服务器会返回一个包含服务端业务调用的Binder对象,用过这个Binder对象,客户端就可以获取服务端提供的服务或者数据。

2>Intent putExtra

设置方法

intent.putExtra("aaa", "bbbb"); 

获取方法

this.getIntent().getXXXExtra("aaa") 

3>Bundle

传输:

Bundle bundle = new Bundle();
bundle.putXXX("key", "value");

intent.putExtras(bundle);

获取:

Bundler bundle = getIntent().getExtras();
XXX xx = bundle.getXXX("key");

4>文件共享

5>Messager

6>ContentProvider

7>Socket

socket也叫套接字,分为流式套接字(TCP)和用户数据报套接字(UDP)

Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信。两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据。而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求。

基于TCP协议的Socket:

服务器端首先声明一个ServerSocket对象并且指定端口号,然后调用Serversocket的accept()方法接收客户端的数据。accept()方法在没有数据进行接收的处于堵塞状态。(Socketsocket=serversocket.accept()),一旦接收到数据,通过inputstream读取接收的数据。
客户端创建一个Socket对象,指定服务器端的ip地址和端口号(Socketsocket=newSocket(“172.168.10.108”,8080);),通过inputstream读取数据,获取服务器发出的数据(OutputStreamoutputstream=socket.getOutputStream()),最后将要发送的数据写入到outputstream即可进行TCP协议的socket数据传输。

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务