2013-08-22 2 views
3

Мне нужно, чтобы мой сервис всегда работал в фоновом режиме. И начиная мой сервис с функцией «startService()». Я не хочу перезапускать службу независимо от состояния приложения.Служба поддержки Android START_STICKY START_NOT_STICKY

Вот мои наблюдения.

START_STICKY> Если приложение запускается, служба перезапускается. И сервис перезапускается, когда приложение закрывается.

Служба поддержки

START_NOT_STICK не работает после закрытия приложения.

Мне нужна служба, которая всегда работает, и она будет получать трансляцию при запуске приложения. Статус службы не зависит от приложения или нет.

Вы можете мне помочь?

Спасибо.

ответ

3

вы хотите установить приемник BOOT, который запускает вашу службу ALARM (которая будет периодически срабатывать и убедитесь, что ваша служба запущена), когда устройство загружается. Приемник ALARM должен просыпаться каждую минуту (или так), чтобы увидеть, что ваша Служба не была очищена Android (что будет происходить время от времени).

[EDIT]

Вы хотите 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

Я начинаю мой сервис в применении командой startervice. Я попробую ваш код. Это выглядит логично. Спасибо ! – dracula