2012-10-04 189 views
0

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

回答

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

+0

我跟着你提到的教程。但是,RAM存储器被清除时,服务不会自动启动。 – mithu

+0

您的示例启动服务并使其即使在活动关闭后仍保持运行。但是在RAM内存被清除之后,Service始终不会自动启动,直到Activity启动。我有一个想法,请告诉我,如果这可以遵循。服务应作为可通过BroadcastReceiver启动的不同应用程序编写。服务和活动共享本地数据库。所以应该创建一个ContentProvider来在这两个应用程序之间共享数据库。这可能吗? – mithu

+0

即使应用程序停止,我的示例服务也会启动。 – marwinXXII

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毫秒运行backgroundService