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

Вопросов

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

Solutions Collecting From Web of "Android: запуск службы с помощью Context.startService vs PendingIntent.getService"

Там нет никакой разницы.

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

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

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

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