Android开发艺术探索 第二章 下

Android开发艺术探索   第二章 下
Android IPC方式
这个单独做一节,因为这一节比较重要,从这节开始,技术细节会独立成另外Android的笔记,这边只记录大纲这样。
2.4  Android IPC方式
1.使用bundle(包含广播这个方式)
四大组件中,服务、活动、广播都是可以支持Intent中传递bundle数据的,bundle中传输的数据必须是可以序列化的,包括基本类型、实现了Serializable或parcellbale接口的对象,还有一些Android支持的特殊对象。需要留意的是,Bundle不支持的数据是无法通过它进行传输的,这是一种最简单的进程间通信方式。
2.文件共享
共享文件也是一个不错的方法,需要注意并发读写的问题,文件没有限制,容易出现同时操作导致出错,所以最好是用于交互不频繁的通信中。
SharePreferences是个特例,它底层实现是采用XML文件来存储键值对的,本质上来说,它也是属于文件存储中的一种,由于系统对它的读写有一定的缓存策略,缓存中也会有一份数据,所以多进程模式下系统对它的读写也是不可靠的。不建议在进程间通信使用。
3.使用Messenger(基于AIDL)
Messenger是一种轻量级的IPC方案,底层实现是AIDL。它对AIDL进行了封装,由于它一次处理一个请求,因此在服务端我们不用考虑线程同步的问题,因为不存在并发执行的情形。
服务端进程:需要创建一个Service处理服务端的连接请求,同时创建一个Handler并通过它来创建一个Messenger对象,然后在Service的onBind中返回这个Messenger对象底层的Binder即可。
客户端进程:首先需要绑定服务端的Service,绑定成功后用服务端返回的IBinder对象创建Messenger,通过这个Messenger就可以向服务端发送消息了,发送消息类型就是Message对象。如果需要服务端回应,客户端一样需要创建一个Handler并通过它来创建一个Messenger对象,并把这个Messenger对象通过Message的replyTo参数传个服务器,服务器可以通过replyTo参数回应客户端。
4.使用AIDL (基于Binder)
Messenger是串行处理客户端请求,如果有大量的并发请求,那么Messenger并不合适,这个时候需要我们自己来实现AIDL啦。
服务端:
需要创建一个Service处理服务端的连接请求,同时创建一个AIDL文件,将暴露给客户端的接口在这个AIDL文件中声明,最后在Service中实现这个AIDL接口即可。
客户端:
首先需要绑定服务端的Service,绑定成功后用服务端返回的IBinder对象转成AIDL接口所属的类型,接着就可以调用AIDL中的方法了。
是不是感觉听起来和Messenger很像,是的,他们流程都是AIDL,所有基本都是一样的。只不过Messenger是封装了Message这个消息对象类型,而我们自定义的AIDL可以自己写接口。
来看看AIDL支持的数据类型:基本数据类型,String和CharSequence,list只支持ArrayList,Map支持HashMap,Parcelable的对象,AIDL:所有的AIDL接口本身也可以在AIDL文件中使用。
5.使用ContentProvider (基于Binder)
内容提供者ContentProvider是系统专门提供不同应用进行数据共享的方式,需要注意的一些细节:CRUD操作、防止SQL注入和权限控制等。ContentProvider主要是以表格的形式来组织数据,虽然看起来很像数据库的样子,但其实具体实现没有要求,我们可以用SQLite数据库,也可以用文件,或者内存里面的对象。使用起来很简单,只需要继承ContentProvider,实现6个抽象方法就可以了:onCreate、query、updata、insert、delete、getType这六个。
6.使用Socket
首先你得知道,Socket熟称“套接字”,是网络通信中的概念,TCP/UDP这些底层都是基于Socke的,HTTP和HTTPS基于TCP的协议。TCP对应流式套接字,UPD对应用户数据报套接字。TCP提供稳定的双向通信功能,UDP提供不稳定的单向通信功能,UDP也可以实现双向通信,在性能上,UDP有更好的效率,缺点是不能保证数据能够正确传输。
使用Socket进行通信,需要网络权限,需要声明权限。其次,不能在主线程中访问网络,在4.0以上版本会抛出异常,因为进行网络访问很可能是耗时的,主线程不进行耗时操作。
2.5 BInder 连接池
在介绍AIDL连接池之前,先简单回顾下AIDL使用的大致流程:首先服务端创建一个Service和一个AIDL接口,然后创建一个类继承AIDL接口中的Stub中的抽象方法,在Service的onBind方法中返回这个类的对象,然后客户端就可以绑定服务端service,建立连接后就可以访问服务端的方法。
现在考虑一种情况:公司的项目越来越庞大了,现在有10个不同的业务模块都需要使用AIDL来进行进程间通信,那我们该怎么处理呢?也许你会说:“就按照AIDL的实现方式一个个来吧”,这是可以的,如果用这种方法,首先我们需要创建10个Service,这好像有点多啊!如果有100个地方需要用到AIDL呢,先创建100个Service?到这里,相信大家应该明白问题所在了。随着AIDL数量的增加,我们不能无限制地增加Service,Service是四大组件之一,本身就是一种系统资源。而且太多的Service会使得我们的应用看起来很重量级,因为正在运行的Service可以在应用详情页看到,当我们的应用详情显示有10个服务正在运行时,这看起来并不是什么好事。针对上述问题,我们需要减少Service的数量,将所有的AIDL放在同一个Service中去管理。在这种模式下,整个工作机制是这样的:每个业务模块创建自己的AIDL接口并实现此接口,这个时候不同业务模块之间是不能有耦合的,所有实现细节我们要单独开来,然后向服务端提供自己的唯一标识和其对应的Binder对象;对于服务端来说,只需要一个Service就可以了,服务端提供一个queryBinder接口,这个接口能够根据业务模块的特征来返回相应的Binder对象给它们,不同的业务模块拿到所需的Binder对象后就可以进行远程方法调用了。由此可见,Binder连接池的主要作用就是将每个业务模块的Binder请求统一转发到远程Service中去执行,从而避免了重复创建Service的过程。
2.6  选用适合的IPC方式
第二章到这了就结束了,这里做个总结,不动的应用场景对应不同方法,各自有各自的优劣。
Bundle
优点:简单易用
缺点:只能传输Bundle数据类型
适用场景:四大组件的进程间通信
文件共享
优点:简单易用
缺点:不适合高并发通信,不支持实时通信。
适用场景:无并发访问情形,交换简单的数据实时性不强的场景。
AIDL
优点:功能强大,支持一对多并发通信,支持实时通信。
缺点:使用复杂,需要处理线程同步
适用场景:一对多通信且有远程过程调用需求
Messenger
优点:功能一般,支持一对多串行通信,支持实时通信
缺点:不能处理高并发,不支持远程过程调用,只能传输Bundle数据类型
适用场景:低并发的一对多即时通讯,无远程过程调用需求,或者无须要返回结果的远程过程调用需求
ContentProvider
优点:数据源访问方面功能强大,支持一对多并发数据共享,可以扩展
缺点:受限的AIDL,主要提供数据源的增删查改操作
适用场景:一对多并发数据共享
Socket
优点:功能强大,支持一对多并发实时通信。
缺点:细节繁琐,不支持直接的远程过程调用
适用场景:网络数据交换
附上表格:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
本书是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。本书从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些知识点;第二,结合Android源代码和应用层开发过程,融会贯通,介绍一些比较深入的知识点;第三,介绍一些核心技术和Android的性能优化思想。 第1章 Activity的生命周期和启动模式 1 1.1 Activity的生命周期全面分析 1 1.1.1 典型情况下的生命周期分析 2 1.1.2 异常情况下的生命周期分析 8 1.2 Activity的启动模式 16 1.2.1 Activity的LaunchMode 16 1.2.2 Activity的Flags 27 1.3 IntentFilter的匹配规则 28 第2章 IPC机制 35 2.1 Android IPC简介 35 2.2 Android中的多进程模式 36 2.2.1 开启多进程模式 36 2.2.2 多进程模式的运行机制 39 2.3 IPC基础概念介绍 42 2.3.1 Serializable接口 42 2.3.2 Parcelable接口 45 2.3.3 Binder 47 2.4 Android中的IPC方式 61 2.4.1 使用Bundle 61 2.4.2 使用文件共享 62 2.4.3 使用Messenger 65 2.4.4 使用AIDL 71 2.4.5 使用ContentProvider 91 2.4.6 使用Socket 103 2.5 Binder连接池 112 2.6 选用合适的IPC方式 121 第3章 View的事件体系 122 3.1 View基础知识 122 3.1.1 什么是View 123 3.1.2 View的位置参数 123 3.1.3 MotionEvent和TouchSlop 125 3.1.4 VelocityTracker、GestureDetector和Scroller 126 3.2 View的滑动 129 3.2.1 使用scrollTo/scrollBy 129 3.2.2 使用动画 131 3.2.3 改变布局参数 133 3.2.4 各种滑动方式的对比 133 3.3 弹性滑动 135 3.3.1 使用Scroller 136 3.3.2 通过动画 138 3.3.3 使用延时策略 139 3.4 View的事件分发机制 140 3.4.1 点击事件的传递规则 140 3.4.2 事件分发的源码解析 144 3.5 View的滑动冲突 154 3.5.1 常见的滑动冲突场景 155 3.5.2 滑动冲突的处理规则 156 3.5.3 滑动冲突的解决方式 157 第4章 View的工作原理 174 4.1 初识ViewRoot和DecorView 174 4.2 理解MeasureSpec 177 4.2.1 MeasureSpec 177 4.2.2 MeasureSpec和LayoutParams的对应关系 178 4.3 View的工作流程 183 4.3.1 measure过程 183 4.3.2 layout过程 193 4.3.3 draw过程 197 4.4 自定义View 199 4.4.1 自定义View的分类 200 4.4.2 自定义View须知 201 4.4.3 自定义View示例 202 4.4.4 自定义View的思想 217 第5章 理解RemoteViews 218 5.1 RemoteViews的应用 218 5.1.1 RemoteViews在通知栏上的应用 219 5.1.2 RemoteViews在桌面小部件上的应用 221 5.1.3 PendingIntent概述 228 5.2 RemoteViews的内部机制 230 5.3 RemoteViews的意义 239 第6章 Android的Drawable 243 6.1 Drawable简介 243 6.2 Drawable的分类 244 6.2.1 BitmapDrawable 244 6.2.2 ShapeDrawable 247 6.2.3 LayerDrawable 251 6.2.4 StateListDrawable 253 6.2.5 LevelListDrawable 255 6.2.6 TransitionDrawable 256 6.2.7 Ins
### 回答1: 《Android开发艺术探索》是一本深入探讨Android开发核心技术的著作,由杨扬先生所著。这本书涵盖了该领域的多个方面,从Android系统背后的设计原理,到性能优化和内存管理等实际应用中的技术,都得到了详细讲解。 这本书一共分为14个章节,每个章节都介绍了一项重要的开发技术或原则。例如,书中深入讨论了Activity和Fragment的生命周期管理,以及它们之间的通信机制。此外,还介绍了多线程编程的最佳实践和Android应用的性能优化技巧。 与其他Android开发类书籍相比,这本书强调了实践性。它提供了大量的示例代码和具体的案例分析,帮助读者理解和应用所学知识。此外,该书还涉及了Android最新的开发框架和技术,如Jetpack和Kotlin语言。 《Android开发艺术探索》被广大开发者普遍认为是一本非常实用和有价值的Android开发指南。无论是初学者还是有经验的开发者,都能从中受益。这本书不仅是一本教程,更是一本帮助开发者深入理解Android设计和实现原理的指南。 总结而言,如果你是一名Android开发者,想要提升自己的技术水平并深入了解Android系统的背后运作原理,那么《Android开发艺术探索》是你值得阅读的一本著作。 ### 回答2: 《Android开发艺术探索》是一本著名的Android开发书籍,全称为《Android开发艺术探索:揭秘Android系统设计的奥秘》。该书由杨辉同学编著,由电子工业出版社出版。这本书讲述了Android开发的一些高级技术和实践经验,供开发者更深入地了解Android系统设计。 这本书对于Android开发者来说非常有价值。它不仅介绍了一些基础的Android知识,还深入探讨了一些高级的主题,例如Android系统的启动流程、内存优化、性能优化等。读者可以通过学习这些内容,提高自己的Android开发水平,写出更高效和稳定的应用程序。 《Android开发艺术探索》的特点在于它不仅仅是一本理论性的书籍,更注重实践性和指导性。书中提供了许多实际的案例和代码,让读者能够通过实际操作来理解和掌握书中的知识。同时,它还介绍了一些常见的错误和陷阱,帮助读者避免一些常见的开发问题。 总的来说,《Android开发艺术探索》是一本非常实用和有深度的Android开发书籍。读者通过阅读和实践可以提升自己的开发水平,了解和掌握Android系统设计的奥秘。无论是初学者还是有一定经验的开发者,都能够从这本书中收获很多。 ### 回答3: 《Android开发艺术探索》是一本非常经典的关于Android开发的书籍。该书由任玉刚著写,主要介绍了Android开发的一些技术和艺术探索。 《Android开发艺术探索》的目的是帮助开发者更好地理解Android系统和开发过程中的一些关键概念。书中详细讲解了Android系统的架构和原理,包括Activity、Service、Broadcast Receiver、Content Provider等组件的工作原理和使用方法。 该书还讨论了Android开发中的一些常见问题和难点。例如,性能优化、内存管理、UI优化等。书中提供了很多实际的案例和示例代码,帮助读者更好地理解和应用这些知识。 除了技术方面的内容,该书还着重强调了Android开发中的设计思路和艺术探索。作者通过讲解一些实际的应用案例,引导读者如何设计出更好的用户体验和界面设计。 总之,《Android开发艺术探索》是一本非常有价值的Android开发书籍。无论是初学者还是有一定经验的开发者,都可以从中获得很多有用的知识和经验。无论是对于技术的掌握还是对于开发思路的提升,该书都是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时代我西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值