我正在编写一个应用程序来检测来自耳机插孔的音频并在满足某些音频条件时广播Intents(特别是当它检测到通过辅助音频设备读取卡片时).
我的应用程序没有活动,它只是一个应用程序和一个服务.
一切都运行良好,除了在相对较短的时间段(约一分钟)后由Android清理服务.
我很好奇我需要做些什么来告诉Android这是一个有用的服务,它应该不管它,除非它真的需要它的内存.我意识到我可以创建一个警报,每隔几秒唤醒一次,如果它注意到它不在那里就会启动服务,但这看起来像是一个混乱.是否有更多的Android(y)方式让它保持活力?
我的应用程序没有活动,它只是一个应用程序和一个服务.
这意味着您的应用程序永远不会在任何Android 3.1+设备上运行,除非您与其他将要手动启动您的服务的应用程序有某些联系.
我正在编写一个应用程序来检测来自耳机插孔的音频并在满足某些音频条件时广播Intents(特别是当它检测到通过辅助音频设备读取卡片时).
不要在几何形状之后命名你的公司 - 它已经完成了.:-)
我很好奇我需要做些什么来告诉Android这是一个有用的服务,它应该不管它,除非它真的需要它的内存.
欢迎您使用startForeground()它来声明它是一个前台服务.权衡是您需要显示一个Notification允许用户停止服务的理想选择.请记住,用户可能不会欣赏这一点Notification,但您会坚持使用它,特别是在Android 4.3+上.通过从服务切换到活动可以更好地服务,因此用户可以启动它,刷卡并处理任何事务.
使用 START_STICKY 保留您的服务。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("LocalService", "Received start id " + startId + ": " + intent);
// We want this service to continue running until it is explicitly
// stopped, so return sticky.
return START_STICKY;
}
Run Code Online (Sandbox Code Playgroud)
使用示例:
http://developer.android.com/reference/android/app/Service.html#LocalServiceSample
更多信息:
http://developer.android.com/reference/android/app/Service.html#START_STICKY