目录
Bootstrap(引导)
包含在Android上引导LibreOffice([ˈliːbreɪ])的所有工程的通用代码。此外,它是LibreOfficeKit(LOK)的JNI类的主目录。
Stuff in Source Directory(源目录中的内容)
LibreOffice安卓应用的代码基于Fennec(Firefox浏览器针对移动电话和非个人计算机设备推出的一个浏览器版本)。它使用OpenGL ES 2去渲染文档瓦片(这些瓦片使用LOK去聚集)。应用程序在一个共享库(liblo-native-code.so,它与应用程序捆绑在一起)中包含LibreOffice核心。
Architecture and Threading(体系结构与线程)
应用程序使用4个线程实现编辑支持:
- 安卓UI线程,我们不能在这里执行任何操作,因为这会需要相当长的时间。
- 一个OpenGL线程,它包含OpenGL上下文并且负责绘制所有图层(包含瓦片)到屏幕上。
- 一个执行LibreOfficeKit调用的线程(LOKitThread),它的完成可能需要花费更多时间。此外,当回调发出一个事件时,它也从soffice线程(见下文)接收事件。事件存在于一个阻塞队列中(线程按FCFS[First Come First Served]顺序处理事件,当没有更多事件时休眠,当队列中再次有事件时唤醒)。
- 一个本地线程(native thread)经由LibreOffice创建(我们称它为soffice线程),LibreOffice自身运行于这个线程。它接受来自LOKitThread的调用,并根据需要发出回调事件。
LOKitThread(LOK线程)
LOKitThread(org.

这篇博客详细介绍了Android版LibreOffice的实现,包括Bootstrap引导过程、多线程架构(UI线程、OpenGL线程、LOKit线程、soffice线程)、文档视图的瓦片渲染、编辑功能和事件处理。LibreOfficeKit通过JNI与LibreOffice核心交互,使用OpenGL进行文档渲染,同时支持触摸事件、滚动和缩放。文档视图利用瓦片渲染技术提高性能,动态和固定缩放瓦片层管理着文档的显示。编辑功能涉及输入事件的传递和内容更改后的瓦片刷新。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



