Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

关于"渲染兼容模式" #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
Owner

TakWolf commented May 14, 2016

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

screenshot_2016-05-14-09-22-20

@TakWolf
Copy link
Owner Author

TakWolf commented May 14, 2016

作用

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

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

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

@TakWolf
Copy link
Owner 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
Owner 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
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant