【发布时间】:2011-07-04 16:24:12
【问题描述】:
很容易找到很多文章讨论初学者动态壁纸的实现,这些文章解决了涉及表面等的主要问题。
但是动态壁纸的专业发展呢?以正确的方式构建代码以确保良好的性能、低功耗(以节省电池电量)和最适合不同设备的最佳实践是什么?
如果可能的话,一些涵盖这些问题的代码示例会很棒。
【问题讨论】:
很容易找到很多文章讨论初学者动态壁纸的实现,这些文章解决了涉及表面等的主要问题。
但是动态壁纸的专业发展呢?以正确的方式构建代码以确保良好的性能、低功耗(以节省电池电量)和最适合不同设备的最佳实践是什么?
如果可能的话,一些涵盖这些问题的代码示例会很棒。
【问题讨论】:
功耗...
1) 到目前为止,最重要的是您的壁纸在不可见时应自行关闭。多维数据集示例正确处理了这个问题,删除了 onDestroy()、onSurfaceDestroyed() 和 onVisibilityChanged() 中的可运行回调(当可见 == false 时)。
2)除此之外,功耗的最大决定因素将是您的帧速率。与仅以 1 fps 更新以使其秒针滴答作响的时钟相比,24 fps 动画会消耗更多的汁液。没有办法解决这个问题,除了教育用户,让期望是合理的。无论是应用程序还是动态壁纸,动作游戏都会耗尽您的电量。
性能...
在画布上绘图具有简单的优点,但对于非常复杂的壁纸,您将需要使用 OpenGL。有 GLWallpaperService 和 AndEngine。库存壁纸使用 RenderScript(您可能会发现在 Android 源代码树中查找此代码很有用——比 SDK 中的立方体示例复杂得多)。还有一些关于扩展 libGDX 以处理壁纸的讨论。
最适合...
嗯,它就像 Android 的其他部分一样:您需要根据可扩展的比例来设计您的作品,查询设备并进行相应的调整。对于一个简单的壁纸,通常在 onSurfaceChanged() 中缩放您的作品就足够了,您可以在其中将宽度和高度作为参数。在某些情况下,您可能需要检查完整的 DisplayMetrics。
【讨论】: