RxAndroid+MVP实战
来源:互联网 发布:天猫总是提示网络异常 编辑:程序博客网 时间:2024/05/01 22:29
16年5月份左右,打算做一款APP,该APP主要用来显示某网站的文章内容(就是一款阅读类APP)。
选定的技术路线是:OkHttp+RxAndroid获取响应->正则表达式本地解析->ImageLoader显示图片、WebView显示文本主体部分
然后在今年2、3月份对应用进行了MVP模式的重构。
总结
- 最初的设想是使用Jsoup进行网页分析的,因为Jsoup是基于DOM的解析方式,所以很耗内存也很费时,所以就弃用了,改用正则表达式解析,对比一下发现,内存减少了不少,时间也快了不少。
最初在纠结到底如何显示每篇文章的详情,因为一开始用的Jsoup显示,所以想每篇文章以节点来组织,包括段落节点,标题节点,链接节点等等(对比于HTML的标签),然后用ListView来显示,结果发现不行;后来想只保存网页标签的信息,用TextView+Spannable解析,发现显示代码段效果不是很好。最终在改变了解析方式后,想到了选用webview来本地显示HTML文档,发现效果是最好的。
由于打算使用TextView+Spannable显示文本的,所以说有了下面几篇博客的研究:- TextView显示丰富多彩的文字(一)——如何使用CharacterStyle格式化字符
- TextView显示丰富多彩的文字(二)——如何使用ParagraphStyle格式化段落
- TextView显示丰富多彩的文字(三)——自定义CharacterStyle和ParagraphStyle显示效果
- TextView显示丰富多彩的文字(四)——从源码角度解释格式化显示的原理
在选取了OkHttp作为网络库后,研究了一下OkHttp库,有如下五篇博客的介绍:
- 使用OkHttp进行网络同步异步操作
- 深入理解OkHttp源码(一)——提交请求
- 深入理解OkHttp源码(二)——获取响应
- 深入理解OkHttp源码(三)——网络操作
- 深入理解OkHttp源码(四)——缓存
在我的应用中,给OkHttp添加了一个应用拦截器,用于在请求是文章时,进行解析,即删除一些无用内容,比如广告和一些不打算显示的部分。
关于该类可以参考如下地址:ArticleBodyInterceptor
- 在选用了WebView显示文章内容后,想使用WebView的拦截功能,所以有了下面这篇博客
android WebView拦截请求详解 - 关于缓存的问题,对于所有HTTP响应,使用了OkHttp的缓存功能,这样就实现了两级缓存;对于图片,另外实现了一个ImageLoader类,内部有一个LruCache,再加上OkHttp,从而实现了三级缓存。
- 关于ImageLoader的发展。最初的时候,我是将图片加载放到了Adapter中进行的,使用AsyncTask,使用ImageView的tag属性来避免乱序。为了提高性能,增加了滑动速度过快时不加载(通过不提交任务来实现)。 3月份看了UIL的实现后,对ImageLoader进行了重构,采用它的ImageAware方式,我也实现了一个ImageAware,另外在ImageLoader内部吃用一个Map存储ImageView的id与显示的图片URL,从而解决乱序的问题。
ImageLoader中的线程池采用了和AsyncTask中的线程池一样的配置参数。
关于UIL的源码介绍,可以继续关注我的博客,过些日子就会有博客介绍UIL的源码。 - 关于RxAndroid和MVP。 网上关于RxAndroid和MVP的文章很多,我就不介绍了。
- 关于MVP的一点问题。关于ListView,我使用的MVP中,是将Adapter放入了P层,我看网上一些开源项目是将Adapter和ListView放在了V层,不知道这两种方式有什么区别?更应该采取哪一种方式。
源码地址
整个APP的大体样式如下图:
整个APP的源码地址为:ImportNewClient,欢迎Star。有什么建议的话欢迎留言。
0 0
- RxAndroid+MVP实战
- MVP实战心得(三)---封装Retrofit2.0+RxAndroid+RxBus
- MVP实战心得(三)---封装Retrofit2.0+RxAndroid+RxBus
- MVP实战心得(三)---封装Retrofit2.0+RxAndroid+RxBus
- Retrofit+RxAndroid+MVP
- MVP+Retrofit+RxAndroid实例
- MVP+Retrofit+RXAndroid使用详解
- RxAndroid + OkHttp + MVP(Android Studio)
- Mvp+Retrofit+RxAndroid基础实例
- Rxandroid与MVP的结合(demo)
- Mvp+Rxandroid+Retrofit的简单实现
- MVP+rxAndroid+Material开发的一款APP
- Android MVP实战
- Android MVP实战
- MVP实战心得(一)
- MVP框架实战Demo
- MVP实战心得(一)
- Android MVP模式实战
- Function与Object的那些不清不楚的事
- makefile Cmake
- hpu 1032
- Linux系统入门学习:如何在VPS上安装和访问CentOS 7远程桌面
- 日产佳奔_Nissan的历史
- RxAndroid+MVP实战
- location.search()
- 微服务和分布式对象第一定律
- 线索化二叉树
- [CC]Dynamic GCD
- addslashes
- ubuntu 16.04 google chrome的Adobe插件更新
- javascript canvas 绘图 2d 渐变 阴影
- Android实现RecyclerView侧滑删除和长按拖拽