2013-08-22 120 views
3

我需要讓我的服務始終在後臺運行。並用「startService()」函數啓動我的服務。我不想重啓服務,無論是應用程序的狀態。安卓服務START_STICKY START_NOT_STICKY

這是我的觀察。

START_STICKY>如果應用程序啓動,服務正在重新啓動。當應用程序關閉時,服務也將自行重新啓動。

START_NOT_STICK>服務在應用程序關閉後不起作用。

我需要一個始終運行的服務,它將在應用程序啓動時接收廣播。如果應用程序正在運行,服務狀態將無法取決。

你能幫我嗎?

謝謝。

回答

3

當設備啓動時,您將需要設置啓動您的服務警報(它會間歇喚醒並確保您的服務正在運行)的啓動接收器。警報接收器應該每分鐘醒來(或多次)以查看您的服務未被Android清除(這將不時發生)。

[編輯]

你會想要一個BootReceiver開始你的報警,將是這樣的:

public class BootReceiver extends BroadcastReceiver { 
    @Override 
     public void onReceive(Context context, Intent intent) { 

      AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
      PendingIntent pendingIntent = 
        PendingIntent.getBroadcast(context, 0, new Intent(context, AlarmReceiver.class), 0); 

      alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 2000, 60000, pendingIntent); 
     } 
    } 

而一個alarmReceiver應該是這樣的:

public class AlarmReceiver extends BroadcastReceiver { 
    private String TAG = "AlarmReceiver"; 
    // onReceive must be very quick and not block, so it just fires up a Service 
    @Override 
    public void onReceive(Context context, Intent intent) {  
     Intent i = new Intent(context, MyLovelyService.class);  
     PendingIntent.getService(context, 0,i, 0).send();  
    } 
} 

和最後這需要進入你的清單:

<receiver android:name=".BootReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

<receiver android:name=".AlarmReceiver" /> 
+0

謝謝Dredel。但我的問題是,在應用程序關閉後,服務會自行終止。我怎樣才能防止這個? – dracula

+0

你如何開始服務?如果您的服務是由ALARM(而不是您的應用)啓動的,那麼它將不會以任何方式與您的活動相關聯......我將編輯我的答案以向您展示一個示例... –

+0

我開始了我的服務由startservice命令執行。我會嘗試你的代碼。看起來合乎邏輯。謝謝 ! – dracula