首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android监控应用程序

android监控应用程序
EN

Stack Overflow用户
提问于 2012-08-15 21:19:14
回答 3查看 1.1K关注 0票数 11

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

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

  • 是将音频功能设计为服务还是活动?问题是,如果它被设计为一个活动,如果屏幕在一段时间后关闭,那么音频功能就会关闭。
  • 如何设计轮询功能?使用AlarmManager还是带计时器的内部线程?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-28 16:13:19

我建议如下

( a)使用服务。活动是短暂的实体(它只在屏幕上工作)

b)创建服务前景(请阅读以下内容:http://developer.android.com/reference/android/app/Service.html#startForeground(int。这将减少系统杀死您的服务的可能性。

( c)在服务中,启动一个线程并在线程中执行所需的一切。

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

我相信c)和d)比AlarmManager更可取。这里是文档(http://developer.android.com/reference/android/app/AlarmManager.html)中的一篇文章:“注意:警报管理器是针对您希望在特定时间运行应用程序代码的情况,即使您的应用程序目前没有运行。对于正常的定时操作(滴答、超时等),使用Handler更容易,效率更高。”

由于您的应用程序正在运行,所以最好有一些永久运行的线程,并在上面执行一些内容。一般来说,Handler、HandlerThread、MessageQueue只是比较复杂的消息处理和调度的方便类。看起来你的情况很简单,通常的线程应该就足够了。

票数 1
EN

Stack Overflow用户

发布于 2012-09-12 00:59:07

与Victor一致,您肯定希望使用服务,并通过调用startForeground()将其固定在内存中

不过,我建议您研究如何利用内置的系统Handler;将您的功能放在一个Runnable中并调用mhandler.postDelayed(myRunnable, <some point in future>);这将使android框架能够充分利用电源管理。

票数 1
EN

Stack Overflow用户

发布于 2012-09-13 12:41:44

这是一项服务。

您可能需要一些额外的健壮性:服务可以被杀死,以后不会重新启动,甚至是前台服务。这会阻止你的监控。

从UI开始您的服务。如果您希望该服务能够在设备重新引导的情况下生存下来,也可以从BroadcastReceiver for android.intent.action.BOOT_COMPLETED启动它。

如这里所述,在服务中创建一个线程。

此外,使用警报管理器定期再次启动您的服务。多个startService()调用是可以的。如果已经在运行,则服务将继续运行。但是如果它被系统遗忘了,比如说,在经历了一系列低资源状况之后,它现在就会重新启动。

负责任地安排好那些警报:做一个好公民,设定绝对最小的频率。毕竟,Android有一些很好的理由来终止这项服务。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11977497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档