Symbian中的电源管理

时间:2010-08-29 06:28:28

标签: symbian s60

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

具体来说,有没有办法(即API)让Symbian应用程序提示操作系统关于其当前状态以减少电池消耗? 例如,在Android中,存在唤醒锁的概念,这会阻止设备进入待机模式 - 在Symbian中有类似的东西吗?

修改
将代码作为单独的线程与Open-C库一起运行时是否有任何影响,而不是使用Active Objects等作为“本机”Symbian C ++? (大多数时候,Open-C代码在IO上都是阻塞的。)

5 个答案:

答案 0 :(得分:3)

  1. 您可以使用RTimer :: Inactivity()方法检查用户(in-)活动。这种方式在Forum Nokia Wiki page中描述。在那里,它还描述了如何重置不活动计时器。
  2. 您可以使用HAL API检查设备屏幕是打开还是关闭。请参阅HAL和HALData类。你可以使用这样的电话:
  3. TInt displayState; HAL::Get(HALData::EDisplayState, displayState); 如果显示关闭则displayState将保持为0或在其他情况下保持为1。

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

    您还可以使用Nokia Energy Profiler应用程序记录手机的耗电量,并为您的后台服务提供不同的省电选项。另请参阅诺基亚document,其中介绍了节省设备电源的最佳做法。这份文件非常简单,但仍然有用。

    希望这有帮助。

    编辑:关于单独的线程和Open C.据我所知,Open C只是一个插件,而在内部,所有实现仍然是“本机Symbian”。因此,只要您避免定期轮询某些资源并仅使用通常的阻塞IO,您的代码就像标准的Symbian Active Objects技术(使用特定于Symbian的信号量来阻止线程)一样经济实惠。

答案 1 :(得分:1)

我没有在Symbain中遇到任何特殊情况,以使设备远离待机模式。基本上,“最佳实践”与所有移动设备相同:

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

对我而言,我发现它主要取决于电池寿命与应用程序的性能/响应性之间的权衡。不幸的是,功率似乎总是与性能/响应性方面相关并且该死的电池耗尽......

答案 2 :(得分:1)

为您的应用程序提供低优先级(请参阅RProcess和RThread类)。您的方法将取决于您的后台应用程序的功能。这些东西消耗大部分电池:无线电(GSM / 3G / WIFI /蓝牙),屏幕背光,文件访问。

Symbian OS总是试图让你的应用程序进入睡眠状态,你不需要告诉它这样做。只要确保你的方法让它有机会让它入睡。

答案 3 :(得分:0)

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

在Symbian中,它取决于您用于运行后台活动的内容。

您使用的是线程控件还是ActiveX控件。

对于Eg。您正在开发您希望浏览器下载内容的应用程序浏览器,然后下载活动应该在后台进行,并且能够开始活动以及何时显示进度以及何时完成它应该再次出现。

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

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

答案 4 :(得分:0)

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

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

其中一种方法应该根据您的需要而有效。如果您更详细地描述您想要实现的目标,那么帮助您会更容易。