我有一个活动和后台服务。我通过Intent从Activity启动服务。即使活动已关闭,服务也会无限期运行。但问题是,如果我从任务管理器中清除内存,则服务停止并且不会再次启动,直到再次启动活动。我希望服务在内存清除一段时间后自动启动。我怎么能实现这个目标?请帮忙。
答案 0 :(得分:0)
使用AlarmManager来安排运行您的服务。
在您的主(根)活动中:
@Override
public void onStop() {
super.onStop();
AlarmManager service = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
Intent i = new Intent(this, MyService.class);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 30);
PendingIntent pending = PendingIntent.getService(this, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
service.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
REPEAT_TIME, pending);
}
这将在您的活动停止后30秒内开始服务。
或者,您可以定义BroadcastReceiver,它将检查服务是否正在运行并启动它。要实现这一目标,只需创建广播PendingIntent
。
您可以在Android Service Tutorial中找到更多代码和示例。
答案 1 :(得分:0)
AlarmManager service = (AlarmManager) getApplicationContext().getSystemService(
Context.ALARM_SERVICE);
Intent i = new Intent(this, BackgroundService.class);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 30);
PendingIntent pending = PendingIntent.getService(this, 0, i,
PendingIntent.FLAG_CANCEL_CURRENT);
service.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),30000, pending);
此代码为真30000毫秒运行后台服务