Android中的背景传感器数据收集器

时间:2010-12-11 09:53:09

标签: android service background

我现在正在编程一个收集传感器数据的程序,例如acclerometer值一整天。

目前我只使用一个活动并运行活动一整天(我关闭屏幕自动黑屏),并且白天不要做任何短消息或电话。

我听说我可以使用Service在后台制作这种长时间运行的数据收集器。但在我http://code.google.com/p/pedometer/检查了计步器之后。我发现,当屏幕变黑时,计步器不起作用。 (但是,只要电源打开,像预测仪这样的应用在任何情况下都应该起作用。)

虽然我不关心总是感应到测量仪的电源问题,但我确实想要将屏幕变黑以节省电量以记录更多的测量仪数据点

我正在考虑两种方式:

然而,正如计步器应用所示,使用服务。当屏幕变黑时,服务似乎也停止了工作!也许代码有bug。

2.我的申请仍然是一项活动。但我将scrren灯改为0或全黑以节省电量。

我的问题是:1)即使屏幕长时间熄灭,服务仍然能够始终保持运行状态; 2,如何更换屏幕灯?

谢谢!

3 个答案:

答案 0 :(得分:6)

关于1 - 您需要的是远程服务。这是一种几乎类似于“本地”服务(在计步器示例中使用)的服务,但即使在后台没有任何活动被绑定,它也可以运行。您可以关闭屏幕甚至活动可能崩溃(在一个坏的情况下;))但是如果您使用startService(...)而不是bindService(...)启动它,服务将继续运行。

尝试通过this,看看是否有帮助。

关于2 - 你应该真的使用(1);)

答案 1 :(得分:3)

您不需要远程服务 - 这可以通过本地Service完成。

使用命令模式而不是服务的绑定模式,即使用startService() / stopService()而不是bind() / unbind()

在您的服务onStartCommand()方法中,返回Service.START_REDELIVER_INTENT或类似内容,以使服务的有效期超过Activity

现在诀窍:为了在手机进入睡眠状态时保持正常的服务处理,您需要使用PowerManager.WakeLock。这些很难做到正确,我不认为这个答案需要完整的解释。

以下是更多信息:


对摘要答案表示歉意,但您的问题涉及到一些高级主题方面的问题相当广泛。

答案 2 :(得分:0)

对于大多数情况,可以使用IntentService实施后台服务。

确保后台服务适用于最新和较早的Android版本,如2.3或2.2。

从Android 4.0开始,设计后台操作是不同的。

Best Practices for Background Jobs

Performing Network Operations