Может ли быть конфликт из-за двух сервисных намерений с одним и тем же сервисом? - PullRequest
1 голос
/ 31 марта 2010

Мне просто интересно, возникнет ли конфликт, если два сервисных намерения будут отправлены одному и тому же сервису одновременно. Мой код, как показано ниже:

public static class UpdateService extends Service {

    @Override
    public void onStart(Intent intent, int startId) {
        int widgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                AppWidgetManager.INVALID_APPWIDGET_ID);

        UpdateThread updateThread = new UpdateThread();
        updateThread.mWidgetId = widgetId;
        updateThread.mContext = this;

        updateThread.start();

        stopSelf();
    }
}

Предположим, что есть два намерения, намерение 1 и намерение 2, для UpdateService одновременно. Как я понимаю, будет только один экземпляр UpdateService. Тогда, будут ли эти два намерения вызывать последовательный запуск служебного кода, как в рабочем процессе ниже?

  1. UpdateService запускается, то есть вызывается onStart () для намерения 1.
  2. UpdateService останавливается, потому что stopSelf () вызывается в onStart ().
  3. UpdateService запускается, т.е. вызывается onStart () для намерения 2.
  4. UpdateService останавливается, потому что stopSelf () вызывается в onStart ().

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

Спасибо.

1 Ответ

1 голос
/ 31 марта 2010

Могут ли два намерения вызвать код службы, т. е. onStart (), для запуска одновременно?

Нет. Service имеет onStart(), вызываемый в главном потоке приложений, и есть только один из них. Следовательно, два Intents будут доставлены последовательно. Кто из них первый, конечно, не определен.

Кстати, было бы проще, если бы вы расширили IntentService, поскольку он уже обрабатывает фоновый поток для вас - все, что вы реализуете в onHandleIntent(), не выполняется в основном потоке приложения.

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