Android: запуск службы с помощью Context.startService против PendingIntent.getService - PullRequest
15 голосов
/ 06 февраля 2012

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();

Вопросы

  1. Когда вы запустите службу с Context.startService против PendingIntent?
  2. Почему вы используете один поверх другого?

Ответы [ 2 ]

19 голосов
/ 06 февраля 2012

Там действительно нет разницы.

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

PendingIntent - это намерение, которое ожидает, ожидает, что означает, что его NOT должно произойти сейчасно в ближайшее время.Принимая во внимание, что с намерением оно отправляется в тот же момент.

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

1 голос
/ 26 июня 2012

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 (), чтобы служба получала всю необходимую информацию для своей работы.

...