Skip to content
This repository has been archived by the owner on Sep 28, 2023. It is now read-only.

关于"渲染兼容模式" #34

Closed
TakWolf opened this issue May 14, 2016 · 3 comments
Closed

关于"渲染兼容模式" #34

TakWolf opened this issue May 14, 2016 · 3 comments
Labels

Comments

@TakWolf
Copy link
Collaborator

TakWolf commented May 14, 2016

从提交 05664b8 开始,新增加了一个"渲染兼容模式",在设置中可以选择启用或者关闭这个功能。

screenshot_2016-05-14-09-22-20

@TakWolf
Copy link
Collaborator Author

TakWolf commented May 14, 2016

作用

这个功能主要尝试解决来自 #26 的问题,即解决Markdown在原生客户端上的渲染实现以及效率问题。

默认的情况下,话题详情页面使用原生组件ListView生产数据列表,ListView中的每一个Cell都包含一个WebView来渲染各自数据源中的MarkdownContent。Cell有一个回收池重用机制,会造成WebView不断重载,性能抖动严重。

启用兼容模式后,话题详情页面使用一个WebView来统一渲染,即所有数据统一由Dom渲染,没有回收重用机制,也就么有原生渲染的诸多问题。这种方式性能瓶颈主要在WebView本身的性能问题上。同时丢失了原生组件上的一些UI动画过度效果。

@TakWolf
Copy link
Collaborator Author

TakWolf commented May 14, 2016

兼容性

原生WebView的渲染性能问题,在Android 5.0以上版本,表现还可以,在以下版本,性能问题严重。
因此这个设置,在API 21以上(Android 5.0),默认是关闭的,在API 20以下,默认是开启的。

兼容模式实际最低版本为API 14,但是项目最低兼容版本为 API 9,也就是说,如果你是Android 2.X的系统,即使开启了这个设置,实际上也不会启用兼容模式。

@TakWolf
Copy link
Collaborator Author

TakWolf commented May 14, 2016

实现

兼容布局的实现可以参考 https://github.com/TakWolf/CNodeMD-Page-Render-Compat ,这个实现实际上并不是一个纯粹的面向web的方案,在客户端中,他只实现布局系统,网络数据的获取仍然通过原生代码实现。

客户端采用MVP结构,因此重用了大量的业务逻辑代码,兼容模式的实现实际上只是提供了一种V的实现方式而已。详情可以参考对比 TopicActivity.javaTopicCompatActivity.java 的编码实现。

目前项目已经很难再算作是纯正的原生项目了,已经演变成了混合开发的模式了,混合部分的代码在总量中已经占有了重要的比重。个人觉得这个项目是混合开发的一个不错的参考示例。

@TakWolf TakWolf closed this as completed May 14, 2016
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

1 participant