从活动中调用后台服务

时间:2012-10-04 03:05:52

标签: android android-activity android-service

我有一个活动和后台服务。我通过Intent从Activity启动服务。即使活动已关闭,服务也会无限期运行。但问题是,如果我从任务管理器中清除内存,则服务停止并且不会再次启动,直到再次启动活动。我希望服务在内存清除一段时间后自动启动。我怎么能实现这个目标?请帮忙。

2 个答案:

答案 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毫秒运行后台服务