android监控应用程序
我想创建一个具有实时监控功能的Android应用程序。一个监控功能是审计音频流。另一个功能是与外围传感器交互。这些监控功能可由其他人触发。 此外,为了节省功耗,音频功能将以轮询模式运行,即睡眠一定时间,唤醒一定时间 我正在考虑如何设计Android应用程序android监控应用程序,android,Android,我想创建一个具有实时监控功能的Android应用程序。一个监控功能是审计音频流。另一个功能是与外围传感器交互。这些监控功能可由其他人触发。 此外,为了节省功耗,音频功能将以轮询模式运行,即睡眠一定时间,唤醒一定时间 我正在考虑如何设计Android应用程序 将音频功能设计为服务还是活动? 问题是,如果将其设计为活动,则如果屏幕在一段时间后关闭,音频功能将关闭 如何设计轮询功能?使用AlarmManager或带计时器的内线程 我的目标是尽可能节省电力消耗。谢谢。我建议您: a) 使用服务。活动
- 将音频功能设计为服务还是活动? 问题是,如果将其设计为活动,则如果屏幕在一段时间后关闭,音频功能将关闭
- 如何设计轮询功能?使用AlarmManager或带计时器的内线程
我的目标是尽可能节省电力消耗。谢谢。我建议您: a) 使用服务。活动是短暂的实体(它仅在屏幕上工作) b) 使服务成为前台(阅读以下内容:,android.app.Notification)。这将减少系统终止您的服务的机会 c) 在服务中,启动一个线程并执行线程中需要的所有操作 d) 如果希望定期执行,只需在线程中执行Thread.sleep()(线程睡眠时不消耗CPU周期) 我认为c)和d)比AlarmManager更可取。 这是一篇来自文档的文章(http://developer.android.com/reference/android/app/AlarmManager.html):“注意:Alarm Manager适用于希望在特定时间运行应用程序代码的情况,即使应用程序当前未运行。适用于正常计时操作(滴答声、超时等)使用Handler更简单、更高效。”
由于您的应用程序正在运行,因此最好有一些永久运行的线程并在其上执行某些操作。一般来说,Handler、HandlerThread和MessageQueue只是更复杂的消息处理和调度的方便类。看起来您的案例非常简单,普通线程就足够了。同意Victor的意见,您肯定要使用服务,并通过调用
startForeground()将其固定到内存中。
但是,我建议您考虑使用内置的系统处理程序;将您的功能放在一个Runnable
中,然后调用mhandler.postDelayed(myRunnable,)
;这将允许android框架充分利用电源管理。这是一项服务
您可能需要一些额外的健壮性:服务可以被终止,以后不会重新启动,即使是前台服务。这将停止你的监视
从UI启动您的服务。如果您想让服务在设备重新启动后继续运行,也可以从BroadcastReceiver for android.intent.action.BOOT_启动它
在服务中创建一个线程,如其他答案中所述
此外,使用Alarm Manager定期重新启动服务。多个startService()调用都可以。如果已经运行,服务将继续运行。但是,如果系统忘记了它,比如说,在一系列资源不足的情况下,它现在将重新启动
负责任地安排这些警报:作为一个好公民,设置绝对最小的频率。毕竟,安卓有很好的理由终止这项服务
对于某些服务,可能需要更多的步骤,但在这种情况下,这种方法似乎就足够了。什么是“审计音频流”?使用音频记录读取音频缓冲流,审计分贝水平并制作日志。谢谢