安卓后台传感器数据收集器

3
我正在编写一个程序,用于收集传感器数据,例如整天的加速度计值。
目前我只是使用Activity,并在整个一天内运行该活动(我关闭屏幕自动黑屏),并且在这一天内不发送任何短信或打电话。
我听说可以使用Service在后台运行此类长时间运行的数据收集器。但是在检查了http://code.google.com/p/pedometer/的计步器后,我发现当屏幕变黑时,计步器无法工作。(但是像计步器这样的应用程序只要电源开着就应该可以工作。)
虽然我不关心始终感测加速度计的电力问题,但我确实想黑屏以节省屏幕电量以记录更多的加速度计数据点。 我考虑了两种方法:
1.使用服务,但是,正如计步器应用程序所示。当屏幕变黑时,服务似乎也停止工作了!也许代码有漏洞。
2.我的应用仍然是一个Activity。但是我将屏幕亮度改为0或完全黑色以节省电力。
我的问题是:对于1)服务是否具有在屏幕长时间黑屏时始终运行的能力;对于2),如何改变屏幕亮度?
谢谢!
3个回答

5
关于第一点 - 你需要的是远程服务。这是一个类似于“本地”服务(在计步器示例中使用)的服务,但即使没有任何活动与其绑定,它也可以在后台运行。你可以关闭屏幕,甚至活动可能会崩溃(在极端情况下;)),但如果你使用startService(...)而不是bindService(...)启动了它,服务将继续运行。
尝试通过这个链接看看是否有帮助。
关于第二点 - 你真的应该使用(1);)

注意,整天收集传感器数据的后台服务会耗尽您的电池。您应确保该服务不会无意运行(可以在任务栏中使用漂亮的小通知)。 - mad

3
您不需要远程服务- 这可以通过本地 Service 完成。
使用命令模式而不是绑定模式的服务,即使用startService() / stopService()而不是bind() / unbind()
在您的服务的onStartCommand()方法中,返回Service.START_REDELIVER_INTENT或类似内容,以使服务比Activity存在更长时间。
现在的技巧:为了在手机进入睡眠状态时保持服务正常运行,您需要使用PowerManager.WakeLocks。这些很难搞定,我不认为需要在这个答案中进行全面解释。
以下是更多信息:
很抱歉我的回答比较简略,但问题涉及到一些高级主题。

0

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

确保后台服务在最新和早期的Android版本中正常工作,如2.3或2.2。

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

后台作业的最佳实践

执行网络操作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接