Closed TakWolf closed 8 years ago
这个功能主要尝试解决来自 https://github.com/TakWolf/CNode-Material-Design/issues/26 的问题,即解决Markdown在原生客户端上的渲染实现以及效率问题。
默认的情况下,话题详情页面使用原生组件ListView生产数据列表,ListView中的每一个Cell都包含一个WebView来渲染各自数据源中的MarkdownContent。Cell有一个回收池重用机制,会造成WebView不断重载,性能抖动严重。
启用兼容模式后,话题详情页面使用一个WebView来统一渲染,即所有数据统一由Dom渲染,没有回收重用机制,也就么有原生渲染的诸多问题。这种方式性能瓶颈主要在WebView本身的性能问题上。同时丢失了原生组件上的一些UI动画过度效果。
原生WebView的渲染性能问题,在Android 5.0以上版本,表现还可以,在以下版本,性能问题严重。 因此这个设置,在API 21以上(Android 5.0),默认是关闭的,在API 20以下,默认是开启的。
兼容模式实际最低版本为API 14,但是项目最低兼容版本为 API 9,也就是说,如果你是Android 2.X的系统,即使开启了这个设置,实际上也不会启用兼容模式。
兼容布局的实现可以参考 https://github.com/TakWolf/CNodeMD-Page-Render-Compat ,这个实现实际上并不是一个纯粹的面向web的方案,在客户端中,他只实现布局系统,网络数据的获取仍然通过原生代码实现。
客户端采用MVP结构,因此重用了大量的业务逻辑代码,兼容模式的实现实际上只是提供了一种V的实现方式而已。详情可以参考对比 TopicActivity.java
和 TopicCompatActivity.java
的编码实现。
目前项目已经很难再算作是纯正的原生项目了,已经演变成了混合开发的模式了,混合部分的代码在总量中已经占有了重要的比重。个人觉得这个项目是混合开发的一个不错的参考示例。
从提交 https://github.com/TakWolf/CNode-Material-Design/commit/05664b818df6ae0b96cf82fbdf4cd274f33bdf40 开始,新增加了一个"渲染兼容模式",在设置中可以选择启用或者关闭这个功能。