android监控应用

时间:2012-08-15 21:19:14

标签: android

我想创建一个具有实时监控功能的Android应用程序。一个监控功能是审核音频流。另一个功能是与外围传感器进行交互。其他人可以触发这些监控功能。 此外,为了节省功耗,音频功能将以轮询模式运行,即睡眠一定时间并唤醒一定时间。

我正在考虑如何设计Android应用程序。

  • 是将音频功能设计为服务还是活动? 问题是如果将其设计为活动,如果屏幕在一段时间后关闭,音频功能将关闭。

  • 如何设计轮询功能?使用AlarmManager或内置线程与Timer?

我的目标是尽可能节省电力消耗。感谢。

3 个答案:

答案 0 :(得分:1)

我建议关注

a)使用服务。活动是短暂的实体(只有当它在屏幕上时才有效)

b)使服务前景化(阅读:http://developer.android.com/reference/android/app/Service.html#startForeground(int,android.app.Notification)。这将降低系统终止服务的可能性

c)在服务中,启动一个线程并在线程中执行您需要的所有操作。

d)如果你想定期执行,只需在线程中执行Thread.sleep()(当线程休眠时它不消耗CPU周期)。

我相信c)和d)比AlarmManager更可取。 以下是文档中的内容(http://developer.android.com/reference/android/app/AlarmManager.html):“注意:警报管理器适用于您希望在特定时间运行应用程序代码的情况即使您的应用程序当前没有运行。对于正常的计时操作(刻度,超时等),使用Handler会更容易,也更有效。“

由于运行它的应用程序最好有一些永久运行的线程并在其上执行某些操作。一般来说,Handler,HandlerThread,MessageQueue只是用于更复杂的消息处理和调度的便捷类。看起来你的情况非常简单而且通常Thread应该足够了。

答案 1 :(得分:1)

与Victor一致,你肯定想要使用服务,并通过调用startForeground()将其固定到内存中

但是我建议您考虑使用内置系统Handler;将您的功能放在Runnable中并致电mhandler.postDelayed(myRunnable, <some point in future>);这将允许android框架充分利用电源管理。

答案 2 :(得分:0)

这是一项服务。

您可能需要一些额外的健壮性:即使是前台服务,服务也可以被杀死并且 NOT 稍后重新启动。这将阻止你的监控。

从UI启动您的服务。如果您希望服务在设备重启后继续存在,也可以从Broadcast.Receiver for android.intent.action.BOOT_COMPLETED启动它。

在服务中创建一个线程,如其他答案中所述。

此外,使用Alarm Manager定期再次启动服务。多个startService()调用都可以。如果已经运行,该服务将继续运行。但是,如果它被系统遗忘,比如说,在一系列低资源条件之后,它将会重新启动。

负责任地安排这些警报:要成为一个好公民,设置绝对最小的频率。毕竟,Android有一些很好的理由来杀死这项服务。

对于某些服务,可能需要更多步骤,但在这种情况下,这种方法似乎就足够了。