线程是cpu调度的最小单位;
进程一般指一个执行单元,可以指一个程序或者一个应用。
Android中开启进程很简单,在四大组件中的Androidmanifest中指定android:process属性即可。
2.3.2 Parcelable接口
Parcelable和Serializable的区别。Serializable是java接口,使用方法简单,但是开销大,序列化和反序列化需要大量的IO操作。parcelable是Android的序列号方式,效率很高,试用期啦稍微麻烦些。
2.3.3 Binder
2.4 Android中的IPC方式:
2.4.1 使用Bundle.
四大组件中的三大组件(Activity,Service,Receiver)都支持在Intent中传递Bundle数据。Bundle实现了Parcelable接口。问题:A进程进行一个计算,结果要传入B进程,但是结果不支持Bundle.可以在B进程启动一个后台服务,由Service完成计算后再启动进程。
2.4.2使用文件共享:
序列化和反序列化,SharedPreferences。
SharedPreferences是Android提供的轻量级存储方案。它通过键值对来存储数据,底层采用xml文件来存储。由于系统对它有一定的缓存策略,当面对高并发的读写访问时,变得不可靠,很大几率丢失数据。
2.4.3 Messenger
轻量级的IPC(InterProcess Communication)方案。底层实现是AIDL,也即是说Messenger对AIDL做了封装,使得用起来比较简单。由于它一次只处理一个请求,因此在服务端不用考虑线程同步问题。
Messenger传输的数据必须放入Message中,Message使用的载体有what,arg1,arg2,Bundle,以及replyTo。Message中的另一个字段object在同一个进程中很实用,进程间通信时,Android2.2以前的object字段不支持跨进程传输,即便是2.2以后,也仅仅是系统提供的实现了Parcelable接口的对象才能传输。意味着我们自定义Parcelable对象无法通过object字段来传送。
2.4.4 使用AIDL( Android Interface definition language)
AIDL可以应付客户端大量并发的请求。还可以跨进程调用服务端的方法。
1:服务端:首先创建一个Service用来监听客户端的连接请求,然后创建一个AIDL文件,将暴露给客户端的接口在这个AIDL文件中声明,最后在Service中实现这个AIDL接口。
2:客户端:首先绑定服务端的Service,绑定成功后,将服务端返回的Binder对象转换为AIDL接口所属的类型,接着就可以调用AIDL中的方法了。
AIDL文件中可以支持的数据类型:
1:基本数据类型(int,long,char等);
2:String和CharSequesce;
3:List:只支持ArrayList,里面的元素必须被AIDL支持。
4:Map:只支持HashMap;
5:Parcelable:所有实现了Parcelable接口的对象。
6:AIDL:所有AIDL接口本身也可以在AIDL文件中使用。
进程一般指一个执行单元,可以指一个程序或者一个应用。
Android中开启进程很简单,在四大组件中的Androidmanifest中指定android:process属性即可。
2.3.2 Parcelable接口
Parcelable和Serializable的区别。Serializable是java接口,使用方法简单,但是开销大,序列化和反序列化需要大量的IO操作。parcelable是Android的序列号方式,效率很高,试用期啦稍微麻烦些。
2.3.3 Binder
2.4 Android中的IPC方式:
2.4.1 使用Bundle.
四大组件中的三大组件(Activity,Service,Receiver)都支持在Intent中传递Bundle数据。Bundle实现了Parcelable接口。问题:A进程进行一个计算,结果要传入B进程,但是结果不支持Bundle.可以在B进程启动一个后台服务,由Service完成计算后再启动进程。
2.4.2使用文件共享:
序列化和反序列化,SharedPreferences。
SharedPreferences是Android提供的轻量级存储方案。它通过键值对来存储数据,底层采用xml文件来存储。由于系统对它有一定的缓存策略,当面对高并发的读写访问时,变得不可靠,很大几率丢失数据。
2.4.3 Messenger
轻量级的IPC(InterProcess Communication)方案。底层实现是AIDL,也即是说Messenger对AIDL做了封装,使得用起来比较简单。由于它一次只处理一个请求,因此在服务端不用考虑线程同步问题。
Messenger传输的数据必须放入Message中,Message使用的载体有what,arg1,arg2,Bundle,以及replyTo。Message中的另一个字段object在同一个进程中很实用,进程间通信时,Android2.2以前的object字段不支持跨进程传输,即便是2.2以后,也仅仅是系统提供的实现了Parcelable接口的对象才能传输。意味着我们自定义Parcelable对象无法通过object字段来传送。
2.4.4 使用AIDL( Android Interface definition language)
AIDL可以应付客户端大量并发的请求。还可以跨进程调用服务端的方法。
1:服务端:首先创建一个Service用来监听客户端的连接请求,然后创建一个AIDL文件,将暴露给客户端的接口在这个AIDL文件中声明,最后在Service中实现这个AIDL接口。
2:客户端:首先绑定服务端的Service,绑定成功后,将服务端返回的Binder对象转换为AIDL接口所属的类型,接着就可以调用AIDL中的方法了。
AIDL文件中可以支持的数据类型:
1:基本数据类型(int,long,char等);
2:String和CharSequesce;
3:List:只支持ArrayList,里面的元素必须被AIDL支持。
4:Map:只支持HashMap;
5:Parcelable:所有实现了Parcelable接口的对象。
6:AIDL:所有AIDL接口本身也可以在AIDL文件中使用。