RxAndroid+MVP实战

来源:互联网 发布:天猫总是提示网络异常 编辑:程序博客网 时间:2024/05/01 22:29

16年5月份左右,打算做一款APP,该APP主要用来显示某网站的文章内容(就是一款阅读类APP)。
选定的技术路线是:OkHttp+RxAndroid获取响应->正则表达式本地解析->ImageLoader显示图片、WebView显示文本主体部分
然后在今年2、3月份对应用进行了MVP模式的重构。

总结

  1. 最初的设想是使用Jsoup进行网页分析的,因为Jsoup是基于DOM的解析方式,所以很耗内存也很费时,所以就弃用了,改用正则表达式解析,对比一下发现,内存减少了不少,时间也快了不少。
  2. 最初在纠结到底如何显示每篇文章的详情,因为一开始用的Jsoup显示,所以想每篇文章以节点来组织,包括段落节点,标题节点,链接节点等等(对比于HTML的标签),然后用ListView来显示,结果发现不行;后来想只保存网页标签的信息,用TextView+Spannable解析,发现显示代码段效果不是很好。最终在改变了解析方式后,想到了选用webview来本地显示HTML文档,发现效果是最好的。
    由于打算使用TextView+Spannable显示文本的,所以说有了下面几篇博客的研究:

    • TextView显示丰富多彩的文字(一)——如何使用CharacterStyle格式化字符
    • TextView显示丰富多彩的文字(二)——如何使用ParagraphStyle格式化段落
    • TextView显示丰富多彩的文字(三)——自定义CharacterStyle和ParagraphStyle显示效果
    • TextView显示丰富多彩的文字(四)——从源码角度解释格式化显示的原理
  3. 在选取了OkHttp作为网络库后,研究了一下OkHttp库,有如下五篇博客的介绍:

    • 使用OkHttp进行网络同步异步操作
    • 深入理解OkHttp源码(一)——提交请求
    • 深入理解OkHttp源码(二)——获取响应
    • 深入理解OkHttp源码(三)——网络操作
    • 深入理解OkHttp源码(四)——缓存
      在我的应用中,给OkHttp添加了一个应用拦截器,用于在请求是文章时,进行解析,即删除一些无用内容,比如广告和一些不打算显示的部分。
      关于该类可以参考如下地址:ArticleBodyInterceptor
  4. 在选用了WebView显示文章内容后,想使用WebView的拦截功能,所以有了下面这篇博客
    android WebView拦截请求详解
  5. 关于缓存的问题,对于所有HTTP响应,使用了OkHttp的缓存功能,这样就实现了两级缓存;对于图片,另外实现了一个ImageLoader类,内部有一个LruCache,再加上OkHttp,从而实现了三级缓存。
  6. 关于ImageLoader的发展。最初的时候,我是将图片加载放到了Adapter中进行的,使用AsyncTask,使用ImageView的tag属性来避免乱序。为了提高性能,增加了滑动速度过快时不加载(通过不提交任务来实现)。 3月份看了UIL的实现后,对ImageLoader进行了重构,采用它的ImageAware方式,我也实现了一个ImageAware,另外在ImageLoader内部吃用一个Map存储ImageView的id与显示的图片URL,从而解决乱序的问题。
    ImageLoader中的线程池采用了和AsyncTask中的线程池一样的配置参数。
    关于UIL的源码介绍,可以继续关注我的博客,过些日子就会有博客介绍UIL的源码。
  7. 关于RxAndroid和MVP。 网上关于RxAndroid和MVP的文章很多,我就不介绍了。
  8. 关于MVP的一点问题。关于ListView,我使用的MVP中,是将Adapter放入了P层,我看网上一些开源项目是将Adapter和ListView放在了V层,不知道这两种方式有什么区别?更应该采取哪一种方式。

源码地址

整个APP的大体样式如下图:
APP样式
整个APP的源码地址为:ImportNewClient,欢迎Star。有什么建议的话欢迎留言。

0 0