Подтвердить что ты не робот

Android: запуск службы с помощью Context.startService vs PendingIntent.getService

Context.startService

Intent intent = new Intent(context, MyService.class);
context.startService(intent);

PendingIntent.getService

Intent intent = new Intent(context, MyService.class);
PendingIntent pi = PendingIntent.getService(context, 0, intent, 0);
pi.send();


Вопросы

  • Когда вы запускаете сервис с Context.startService и PendingIntent?
  • Почему вы используете один над другим?
4b9b3361

Ответ 1

На самом деле нет никакой разницы.

В частности, метод Context используется для непосредственного запуска его, когда как правило PendingIntent обычно используется с уведомлением, чтобы запустить это намерение при его прослушивании, которое задерживается до тех пор, пока пользователь не коснется его (как правило). Однако; вы обычно не отправляете PendingIntent напрямую, потому что это не то, для чего он нужен.

A PendingIntent - это намерение, ожидающее, ожидающее ожидания, означающее, что его НЕ должно произойти сейчас, но в ближайшем будущем. Если с намерением, он отправляется в самый момент.

Если PendingIntent не находится в ожидании, когда он используется, то он больше не является PendingIntent, и он преследует Intent. Преодоление цели целиком.

Ответ 2

PendinIntents очень используются для виджетов. Поскольку макет рабочего виджета не "принадлежит" вашему коду, но он находится под контролем системы, вы не можете назначать непосредственно клики для элементов интерфейса. Вместо этого вы назначаете PendingIntent этим элементам (например, кнопкам), поэтому, когда пользователь прикасается к ним, PendingIntent "выполняется", что-то вроде:

// get the widget layout
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.id.widget_layout);

// prepare to listen the clicks on the refresh button
Intent active = new Intent(context, WidgetCode.UpdateService.class);
PendingIntent refreshPendingIntent = PendingIntent.getService(context, 0, active, 0);
remoteViews.setOnClickPendingIntent(R.id.buttonWidgetRefresh, refreshPendingIntent);

// send the changes to the widget
AppWidgetManager.getInstance(context).updateAppWidget(appwidgetid, remoteViews);

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