Остановить неограниченный сервис в Android - PullRequest
1 голос
/ 27 сентября 2011

У меня есть служба, которая автоматически обновляет базу данных за заданный интервал времени. Для этого он получает информацию из Интернета.

Мне нужно, чтобы он был свободен, чтобы он охватывал все действия. Но когда приложение закрыто, было бы неплохо прекратить обслуживание. Для предотвращения разряда батареи. Как этого достичь?

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Я думаю, что вам следует разрешить запуск службы с помощью широковещательного приемника, а затем попросить AlarmManager время от времени перезапускать его.

public class DbUpdateService extends Service {
  //compat to support older devices
  @Override
  public void onStart(Intent intent, int startId) {
      onStartCommand(intent, 0, startId);
  }


  @Override
  public int onStartCommand (Intent intent, int flags, int startId){
   //your method to update the database
   UpdateTheDatabaseOnceNow();

   //reschedule me to check again tomorrow
    Intent serviceIntent = new Intent(DbUpdateService.this,DbUpdateService.class);
    PendingIntent restartServiceIntent = PendingIntent.getService(DbUpdateService.this, 0, serviceIntent,0);
    AlarmManager alarms = (AlarmManager)getSystemService(ALARM_SERVICE);
    // cancel previous alarm
    alarms.cancel(restartServiceIntent);
    // schedule alarm for today + 1 day
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DATE, 1);

    // schedule the alarm
    alarms.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), restartServiceIntent);
    return Service.START_STICKY;
  }

}

Чтобы запустить службу во время загрузки, используйте следующую команду:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class serviceAutoLauncher  extends BroadcastReceiver{

@Override
  public void onReceive(Context context, Intent intent) {
      Intent serviceIntent = new Intent(context,DbUpdateService.class);
      context.startService(serviceIntent);
  }

}

Наконец добавьте это в свой манифест, чтобы запланировать запуск вашего serviceAutoLauncher при каждой загрузке:

    <receiver android:name="serviceAutoLauncher">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            <category android:name="android.intent.category.HOME"></category>
        </intent-filter>
    </receiver>
0 голосов
/ 27 сентября 2011

Зависит от того, как вы запускаете сервис.Если вы запустите его, когда ваша активность будет открыта, тогда вызовите stopService в вашей деятельности onDestroy ().

0 голосов
/ 27 сентября 2011

Используйте метод stopService.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...