Задерживать действие сервиса до тех пор, пока не будет доступно сетевое соединение - PullRequest
1 голос
/ 10 сентября 2011

В моем приложении я хотел бы предложить действие, которое будет регулярно выполняться в фоновом режиме.Поэтому я использую AlarmManager, который запускает IntentService.

Сложность в том, что для этого фонового действия требуется подключение к Интернету.Поэтому я попытался использовать WakeLock, который, по-видимому, не устанавливал соединение, когда устройство было заблокировано.

Затем я подумал о регистрации BroadcastReceiver для прослушивания «android.net.conn.CONNECTIVITY_CHANGE», когда службазапускается и сразу же отменяет регистрацию, как только желаемая трансляция получена.

Мой код выглядит примерно так:

public class BackgroundService extends IntentService {
    private static final IntentFilter filter =
        new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
    private static NetworkStateChangedReceiver receiver =
        new NetworkStateChangedReceiver();

    protected void onHandleIntent(Intent intent) {
        registerReceiver(receiver, filter);
    }
}

Мой вопрос сейчас: будет ли этот приемник уничтожен, как толькокак служба останавливается (так как она не имеет ничего общего, пока нет доступного соединения)?И поэтому, как я могу реализовать услугу, которая задерживает ее работу до тех пор, пока не будет доступно сетевое соединение?

Спасибо.

1 Ответ

1 голос
/ 11 сентября 2011

Будет ли этот приемник уничтожен, как только служба прекратит работу (так как ему нечего делать, если нет доступного соединения)?

Да. Он будет жить несколько микросекунд.

И, следовательно, как я могу реализовать услугу, которая задерживает ее работу до тех пор, пока не будет доступно сетевое соединение?

Используйте ConnectivityManager и getActiveNetworkInfo(), посмотрите, есть ли соединение, а если нет, просто выйдите из onHandleIntent() и дождитесь следующего сигнала тревоги.

Или зарегистрируйте ваш приемник CONNECTIVITY_ACTION в манифесте и используйте его для планирования и отмены сигналов тревоги, чтобы сигналы тревоги были активны только при наличии соединения.

Существуют различные другие стратегии, но эти две должны дать вам отправную точку.

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