android 四大组件区别联系

2018-07-22  本文已影响0人  codeflame

activity:主要用于与用户交互,编写好控件、页面之间的逻辑关系是主要目的



boardcast:主要用于传递消息。看起来似乎能由activity由startActivity方法传送intent以达到信息传递,不过这是方便activity之间调用切换的,传递信息并不是activity的本职工作。

contentProvider:主要用于共享数据。看起来似乎能由boardcast的发送和接收来解决,不过contentProvider更注重于关于具体文件数据的传输通信,而boardcast更常用于程序中动态生成的数据消息。看到它uri来辅助定位文件传输数据通信,更能理解本职工作是提供实体文件内容。

service:后台服务程序。辅助其他组件,提供后台功能。注意,这里的service会运行在对应app的主线程中,service中方法未使用多线程技术时,主线程(ui)有可能因此而ANR

关于AIDL:(android interface definition language)用于远程服务通信,也就是不同进程的通信。
具体:在aidl写的接口将被转换成java的接口形式,多了Stub、parcel、proxy的相关代码。目的:不同进程时,app2调用app1返回的binder的方法,应该在app1中运行占用app1的资源而不是app2。因此asInterface()先判断是否同一进程,是则显然与普通接口无异,否则返回的是Iinterface.Proxy对象,由于Proxy也实现了接口因而客户端中使用起来感觉都是普通的java接口,调用时Proxy会把对象和参数以parcel发送给服务端,服务端接收后运行对应的实际书写的方法,把结果返回给客户端Proxy对象,Proxy再返回结果。
所以最终效果:Proxy是透明的,开发时写aidl接口,与服务通信时不管服务是否同一进程只管照常使用binder对象。

关于Parcelable:通过IPC接口在不同进程中传递对象。对比serializable,主要用于内存之间交换对象,减少IO占用。若要写入到本地/远程硬盘,还是应该使用serializable。

上一篇下一篇

猜你喜欢

热点阅读