8

我目前正在实现一个软件键盘(使用一些复杂的预测),并且使用画布绘制它在性能方面是不够的。我的帧绘制时间远高于 100 毫秒,这显然是不可接受的。

键盘本身由大约 33 个键组成,每个键都使用 drawRoundRect 和上面的简单文本绘制。没有使用任何小部件,所以这是简单的性能。此外,几乎所有谷歌的性能提示都在使用中,所以这也不是速度的原因。

我现在已经到了切换到 opengl 确实有意义的地步,但考虑到基于 opengl 的键盘可能对电池寿命的影响,我仍然持怀疑态度。

由于我没有找到关于该主题的足够文档,我希望这里有人可以为我指出正确的方向。

4

2 回答 2

25

不管它消耗多少电池,您可能都不想这样做,因为大多数现有设备不同时支持多个 OpenGL 上下文,因此您的软键盘将与任何使用 OpenGL 的应用程序不兼容。自己的图。在这些设备上,OpenGL 上下文仅由前台应用程序拥有;它不能用于 UI 的次要部分,如软键盘。

同样正如之前的海报所说,你最好看看如何优化你的常规绘图。绘制矢量非常慢,因此将它们预渲染为位图以执行位图 blit 会很有帮助。还要注意只绘制已更改的窗口部分。100 毫秒是绘制 UI 所花费的相当疯狂的时间,因此几乎可以肯定您可以进行重大优化。您可能想查看平台中的 KeyboardView 代码(由标准软键盘和示例 IME 使用);这已经包含许多类似的绘图优化。

于 2009-12-25T22:40:32.430 回答
4

顺便说一句:你有没有考虑过渲染一次键,然后将它们作为精灵抓取并blitting这些?它应该比渲染矢量图形要好得多。

我不能给你确切的数字(正如 apphacker 指出的那样,这是特定于设备的),但即使 OpenGL 是硬件加速的,因此可能会使用更多的电池,操作应该更快地完成,因此总共使用更少的电量。如果它不是硬件加速的,那么如果完成操作需要更长的时间,它应该只使用更多的功率似乎是合乎逻辑的,因为您只是将一个绘图 API 交换为另一个。总而言之,由于您只需要在外部事件发生时进行绘图,因此从长远来看,这并不重要,因为人们可能每分钟只提示几个键。

您可能只需要实现它(可能在简化的测试用例中)并进行测量。

于 2009-12-25T20:09:44.290 回答