应用框架
应用框架
Glyphix 应用是一个可以独立运行的交互式应用程序,专为 MCU(微控制器)设备设计。它由一系列页面、组件和相关逻辑组成,并受运行时环境的支持与管理。通过 Glyphix 应用框架,开发者可以以接近 Web 开发的方式,使用 HTML 模板、CSS 和 JavaScript 来构建和组织应用。
运行时
运行时是集成到设备固件中的一个原生系统,它提供标准的应用运行环境,并管理应用所需的一切系统资源。本节将介绍运行时的多种职责及其行为标准。
启动应用
运行时可以通过原生或者 JavaScript 接口启动一个应用。每个应用都有独立的运行环境,这意味着:
- 应用运行在独立的 JavaScript 执行环境中,互不干涉。
- 每个应用的资源访问都是独立的,这包括页面结构、文件资源、数据存储等各种资源。
- 无底层权限:应用的运行环境和底层系统无关,因此也无法越过运行时访问底层资源。
但是,某些资源是全局唯一的,如屏幕的可见区域、公共文件目录等。随着用户的操作,某些应用会变为前台的可交互状态,而另一些应用则会切换到后台。
页面管理
Glyphix 应用的界面主要是由页面提供,因此运行时会维护每一个应用的页面对象,并管理全局的弹窗页面。这些管理机制包括了页面的切换、渲染和生命周期控制。
内存资源管理
运行时系统统一管理应用自身和多个应用间的内存和各种系统资源,从而优化开销并避免泄漏:
- 推迟图片、文字等资源的加载作业,降低界面加载的延迟。
- 缓存并优化页面和组件文件,加速热加载性能。
- 维护资源和底层文件映射,实现设备无关的 IO 和资源访问。
- 优化内存占用,避免耗尽 MCU 内存。
资源回收
当应用退出时,运行时会回收所有资源,从而将系统占用释放到启动应用之前的水平。这是一个系统机制,应用层面无法控制,这也意味着:
- 应用退出时不会兑现挂起的 Promise 对象,因此异步操作可能永远不会得到结果。请注意在应用的
onDestroy
生命周期函数中做必要的处理。 - 底层系统可能随时杀死应用,也有完全完全的操作权限。无法在应用层面绝对地保活,同时也不能假设设备的应用调度策略。
标准接口
运行时提供一套标准的 API ,它们抽象了具体设备上的蓝牙、网络、传感器和系统功能等的差异。大部分 API 是所有设备都支持的,但也有一部分仅支持特定设备。
页面
应用会被划分为多个页面,这类似于 HTML 页面:每个页面实现一类交互逻辑,多个页面之间可以互相跳转。
页面是一种充满整个屏幕的界面元素,因此设备上同时只能显示一个页面。为此,应用框架提供了页面栈机制:每一个应用在运行时都可以打开一些页面,这些页面按照栈的方式维护,同时只显示最顶部的页面。由于页面栈是一个栈(stack),所以它支持压入(push)和弹出(pop)操作,通过这两种操作可以向应用的页面栈中放入新页面或关闭顶部的页面。此外,应用框架还扩充了一些实用的页面操作。
大部分页面存在于应用的页面栈中,当应用位于前台时(即它是正在显示的应用),页面栈顶的页面就会被显示,而后台应用的所有页面都不显示。各个应用之间的页面栈完全独立。
一个页面由一个页面组件及若干个子组件构成。所有的页面必须在 manifest.json
中进行声明才可以使用。应用内的页面通过 system.router
API 进行导航和切换,这包含一套路由机制和页面间的数据传递方式。
页面默认使用堆叠布局,就像 stack
组件那样,因此在页面组件中使用这样的模板:
<scroll>
<p>background</p>
</scroll>
<p>overlay</p>
和将其放在一个 stack
组件内具有相同的效果:
<stack>
<scroll>
<p>Background</p>
</scroll>
<p>Overlay</p>
</stack>
使用下面的交互式演示可以观察到这种堆叠效果,你可以使用鼠标或者触摸板滚动“Background”文本并观察堆叠的层级效果。
<scroll>
<p>Background</p>
</scroll>
<p>Overlay</p>
p {
text-align: center;
color: #f088;
font-size: 1.5rem;
}
scroll>p {
height: 100%;
color: black;
font-size: 1.25rem;
}
组件
详见组件框架。