2013-09-26 4 views
0

Я это IntentService:IntentService убит, когда приложение останавливается

public class ServiceUpdateNewResults extends IntentService{ 

private void setAlarmToCheckUpdates() { 
    Calendar calendar = Calendar.getInstance(); 

    //calendar.add(Calendar.DAY_OF_YEAR, 1); //dema 
    //calendar.set(Calendar.HOUR_OF_DAY, 22); //a les 10 
    calendar.add(Calendar.SECOND, 20); 

    Intent myIntent = new Intent(this.getApplicationContext(), ReceiverCheckUpdates.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, myIntent,0); 
    AlarmManager alarmManager = (AlarmManager)this.getApplicationContext().getSystemService(this.getApplicationContext().ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent); 
} 

public ServiceUpdateNewResults() { 
    super("ServiceUpdateNewResults"); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    //fem les coses. 
    //Toast.makeText(this.getApplicationContext(), "holaa", Toast.LENGTH_LONG).show(); 
    setAlarmToCheckUpdates(); 

    Log.d("debugging","hello"); 
} 

} 

И это вызов BroadcastReceiver каждые 20 секунд, который заканчивается тем, что назвали эту услугу, и это произойдет «навсегда». (в будущем это будет 1 день, а не 20 секунд).

Это приемник:

public class ReceiverCheckUpdates extends BroadcastReceiver{ 
Context context; 
@Override 
public void onReceive(Context context, Intent intent){ 
    this.context = context; 
    Intent service1 = new Intent(context, ServiceUpdateNewResults.class); 
    context.startService(service1); 

} 
} 

Это работает отлично, но если остановить приложение от настройки Android, сервис также останавливается. Я хочу избежать этого. Я хочу, чтобы, если приложение закрыто, служба должна продолжать работать.

Возможно ли это? На самом деле, когда служба убита?

+0

Не думайте так, звучит как опасная функция. Тем не менее, вы можете запустить свою службу при загрузке. Кроме того, вашему сервису, скорее всего, будет разрешено продолжать работу после того, как ваше приложение будет открыто, если не будет потреблять слишком много ресурсов. – cYrixmorten

ответ

2

, если остановить приложение от настройки Android, сервис также останавливается

Если под «остановить приложение из настроек Android», вы имеете в виду, что при нажатии кнопки Force Stop, ваше приложение будет не запускаться снова, пока что-то вручную не запустит один из ваших компонентов (например, пользователь запускает вашу активность). Более конкретно, в этом случае ваши аварийные сигналы незапланированы.

Я хочу избежать этого.

Затем не нажимайте кнопку «Силовая остановка».

Я хочу, чтобы, если приложение закрыто, служба должна продолжать работать.

В любом сценарии без принудительной остановки аварийные сигналы будут продолжать стрелять (по крайней мере, до тех пор, пока устройство не заснет, учитывая текущую реализацию).

+0

Забавно, я собирался обратиться к https://github.com/commonsguy/cwac-wakeful, если он спросит о функции загрузки. – cYrixmorten

1

IntentService является частью вашего приложения. Если система уничтожает ваше приложение, оно уничтожит IntentService. Вы можете уменьшить вероятность этого, поставив IntentService в отдельный процесс, но вы не можете остановить систему от уничтожения IntentService. Вы можете сделать маловероятным, что система уничтожит Службу; Для этого вы пользуетесь сервисом «переднего плана». Однако вам следует избегать этого, если вам действительно не нужно. Кроме того, у вас не может быть приоритетного IntentService, поэтому вам придется добавить свой собственный обработчик фона и HandlerThread.

+0

Что вы подразумеваете под 'вы не можете иметь переднего плана IntentService'? – Reinherd

Смежные вопросы