2012-10-04 157 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