2010-08-29 44 views
2

在Symbian中编写低功耗背景应用程序是否有任何“最佳实践”?Symbian中的电源管理

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

编辑:
运行的代码与开放-C库是一个单独的线程时是否有任何的影响,而不是“原生”的Symbian C++,使用活动对象等? (大多数时候,Open-C代码在IO上被阻塞)。

回答

3
  1. 您可以使用RTimer :: Inactivity()方法检查用户(in)活动。这种方式在Forum Nokia Wiki page中描述。在那里还介绍了如何重置不活动计时器。
  2. 您可以使用HAL API检查设备屏幕是打开还是关闭。见类HAL和HALData。你可以使用这样的电话:

TInt displayState; HAL::Get(HALData::EDisplayState, displayState); 如果显示在其它情况下关闭或1的displayState将举行为0。

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

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

希望这会有所帮助。

编辑:关于单独的线程和Open C.据我所知,Open C只是一个插件,深入所有的实现仍然是“原生Symbian”。因此,就避免对某些资源进行定期轮询而只使用普通的阻塞IO而言,您的代码与标准的Symbian主动对象技术(使用Symbian特定的信号量来阻塞线程)相当经济实惠。

0

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

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

是否使用线程或ActiveX控件。

例如,你正在开发应用程序浏览器,你希望浏览器下载一些东西,然后下载活动应该在后台进行,并且能够开始活动,什么时候显示进度以及什么时候显示进度,何时结束应该再次提前。

这取决于你如何使用线程管理线程。你可以不喜欢哪个线程当长时间服用活动开始和何时恢复时,后台活动已暂停执行完毕..

事实上,这是很好的话题ü所遇到

1

我没有在Symbain中遇到任何特殊的问题以使设备脱离待机模式。基本上,“最佳实践”将是相同的所有移动设备:

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

对我来说,我发现它主要归结于电池寿命和应用程序的性能/响应能力之间的折衷。不幸的是,电源总是与性能/响应方面并列,并且该电池电量不足......

0

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

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

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

1

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

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