2

在 Symbian 中编写节能的后台应用程序是否有任何“最佳实践”?

具体来说,Symbian 应用程序是否有任何方法(即 API)来提示操作系统有关其当前状态以减少电池消耗?例如,在 Android 中,有Wake Locks的概念,它可以防止设备进入待机模式 - Symbian 中是否有类似的东西?

编辑:
当使用 Open-C 库将代码作为单独的线程而不是作为“本机”Symbian C++、使用 Active Objects 等运行时,是否有任何影响?(Open-C 代码大部分时间都阻塞在 IO 上)。

4

5 回答 5

3
  1. 您可以使用 RTimer::Inactivity() 方法检查用户(in-)活动。这种方式在诺基亚论坛 Wiki 页面中进行了描述。那里还描述了如何重置不活动计时器。
  2. 您可以使用 HAL API 检查设备屏幕是否打开或关闭。请参阅 HAL 和 HALData 类。您可以使用这样的调用:

TInt displayState; HAL::Get(HALData::EDisplayState, displayState); 如果显示器关闭,则 displayState 将保持 0 或在其他情况下保持 1。

通过这些 API,您将知道用户现在是否处于活动状态,因此您将能够更改后台服务的行为以降低其功耗。

您还可以使用诺基亚 Energy Profiler应用程序记录手机的耗电量,并为您的后台服务提供不同的省电选项。另请参阅诺基亚的文档,其中描述了节省设备电量的最佳实践。该文档非常简单,但仍然很有用。

希望这可以帮助。

编辑:关于单独的线程和 Open C。据我所知,Open C 只是一个插件,所有的实现都仍然是“原生 Symbian”。因此,只要您避免定期轮询某些资源并仅使用通常的阻塞 IO,您的代码在功耗上与标准 Symbian 主动对象技术(使用 Symbian 特定的信号量来阻塞线程)非常经济。

于 2010-08-31T11:54:29.260 回答
1

给您的应用程序低优先级(请参阅 RProcess 和 RThread 类)。您的方法实际上取决于您的后台应用程序的功能。这些东西消耗最多的电池:收音机(GSM/3G/WIFI/蓝牙)、屏幕背光、文件访问。

Symbian OS 将始终尝试让您的应用程序进入睡眠状态,您无需告诉它这样做。只要确保你的方法让它有机会让它进入睡眠状态。

于 2010-09-04T20:03:27.327 回答
1

我在 Symbain 中没有发现任何特殊的东西可以让设备退出待机模式。基本上,“最佳实践”与所有移动设备相同:

  • 不要循环等待,始终使用平台上可用的任何信号服务,用于 Symbain ActiveObjects / User::WaitForXxx
  • 限制后台线程数(目前所有移动设备还是只有1个CPU...)
  • 不要挂在系统服务上,尽快关闭它们(这通常是我的移动应用程序中主要的电池消耗,有时试图找出哪个系统服务导致电池消耗最多可能是一个真正的痛苦,WinMo 对此非常不利)。

对我来说,我发现它主要归结为电池寿命和应用程序的性能/响应能力之间的权衡。不幸的是,电源似乎总是与性能/响应能力有关,并且该死的电池消耗......

于 2010-08-30T20:13:59.603 回答
0

在开发应用程序时,电源管理是一个非常重要的问题。

在 Symbian 中,这取决于您使用什么来运行后台活动。

无论您使用的是 Thread 还是 ActiveX 控件。

例如。您正在开发应用程序浏览器,您希望浏览器下载某些内容,然后下载活动应该在后台进行,并且能够启动活动,以及何时显示进度以及何时完成它应该再次出现在前端。

如果您使用线程,这取决于您如何管理线程。您可以喜欢在长时间的活动开始时暂停哪个线程,以及在后台活动完成执行后何时恢复。

事实上,这是你遇到的非常好的话题

于 2010-08-30T14:31:13.107 回答
0

曾经有一个可以由应用程序重置的不活动计时器。这将阻止屏幕进入任何屏幕保护程序模式。

如果您使用 Symbian 中的各种异步功能,您的应用程序将在适当的时候运行。

这些方法之一应该根据您的需要起作用。如果您更详细地描述您想要实现的目标,它会更容易为您提供帮助。

于 2010-08-31T07:46:41.037 回答