android — Различия между Intent и PendingIntent" />

Различия между Intent и PendingIntent

Я прочитал несколько статей, и обе они, кажется, делают одно и то же, и мне было интересно, в чем разница между запуском службы таким образом:

Intent intent = new Intent(this, HelloService.class);
startService(intent);

или так:

Calendar cal = Calendar.getInstance();
Intent intent = new Intent(this, MyService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent); 

Как я прочитал, эти двое делают одно и то же, если в сервисе вы возвращаете параметр START_STICKY;

82 голоса | спросил user3629316 17 J0000006Europe/Moscow 2014, 10:42:42

4 ответа


0

Намерение

Намерение Android - это объект, несущий намерение, то есть сообщение от одного компонента другому компоненту внутри или снаружи приложения. Intents может передавать сообщения между любым из трех основных компонентов приложения - Activity, Services и BroadcastReceivers.

Само намерение, объект Intent, является пассивной структурой данных. Он содержит абстрактное описание выполняемой операции.

Например: скажем, у вас есть действие, для которого требуется запустить почтовый клиент и отправить электронное письмо. Для этого ваше действие отправит Intent Resolver Android Intent с действием ACTION_SEND вместе с соответствующим выбором:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // only email apps should handle this

Указанный селектор дает пользователю правильный интерфейс для выбора способа отправки данных электронной почты.

ИСКЛЮЧИТЕЛЬНЫЕ НАМЕРЕНИЯ

// Explicit Intent by specifying its class name
   Intent i = new Intent(this, TargetActivity.class);
   i.putExtra("Key1", "ABC");
   i.putExtra("Key2", "123");

// Starts TargetActivity
   startActivity(i);

ПРЕДПОЛАГАЕМЫЕ НАМЕРЕНИЯ

// Implicit Intent by specifying a URI
   Intent i = new Intent(Intent.ACTION_VIEW, 
   Uri.parse("http://www.example.com"));

// Starts Implicit Activity
   startActivity(i); 

Ожидающее намерение

PendingIntent - это токен, который вы даете стороннему приложению (например, NotificationManager, AlarmManager, AppWidgetManager домашнего экрана или другим сторонним приложениям), который позволяет стороннему приложению использовать разрешения вашего приложения выполнить предопределенный кусок кода.

  

Предоставляя PendingIntent другому приложению, вы предоставляете его   право на выполнение операции, которую вы указали, как если бы другой   Приложение было самостоятельно (с такими же разрешениями и идентичностью). Как   например, вы должны быть осторожны при создании PendingIntent:   почти всегда, например, базовый Intent, который вы предоставляете, должен иметь   имя компонента явно установлено на один из ваших собственных компонентов, чтобы обеспечить   в конечном итоге он отправляется туда и больше никуда.

Пример для ожидающего намерения: http://android-pending-intent.blogspot.in/

Источник: Android Intents и Ожидание Android-контента

Надеюсь, это поможет.

ответил Siddharth_Vyas 17 J0000006Europe/Moscow 2014, 14:53:36
0

PendingIntent - это обертка для Intent. Внешнее приложение, которое получает PendingIntent, не знает содержимого Intent, заключенный в PendingIntent. Задача иностранного приложения - отправить намерение владельцу, когда будут выполнены некоторые условия (например: тревога с расписанием или уведомление с щелчком ...). Условия задаются владельцем, но обрабатываются сторонним приложением (например: тревога, уведомление).

Если иностранное приложение отправило намерение вашему приложению, это означает, что стороннее приложение знает о содержании намерения. и зарубежное приложение примет решение отправить намерение, тогда ваше приложение должно обработать намерение, чтобы выполнить некоторые условия => ваше приложение получает ресурс производительности системы.

ответил HungNM2 25 Jpm1000000pmMon, 25 Jan 2016 17:01:54 +030016 2016, 17:01:54
0

Еще одно простое отличие:

  • Обычное намерение умрет, как только приложение будет убито.

  • Ожидающие намерения никогда не умрут. Они будут живы до тех пор, пока это понадобится службе сигнализации, службе определения местоположения или любым другим услугам.

ответил Zumry Mohamed 30 +03002017-10-30T05:50:25+03:00312017bEurope/MoscowMon, 30 Oct 2017 05:50:25 +0300 2017, 05:50:25
0

Функционально разницы нет.

Смысл PendingIntent заключается в том, что вы можете обрабатывать его в другом приложении, которое позже может использовать его, как если бы другое приложение было вами. Вот соответствующее объяснение из документации :

  

Предоставляя PendingIntent другому приложению, вы предоставляете его   право на выполнение операции, которую вы указали, как если бы другой   Приложение было самостоятельно (с такими же разрешениями и идентичностью). Как   например, вы должны быть осторожны при создании PendingIntent:   почти всегда, например, базовый Intent, который вы предоставляете, должен иметь   имя компонента явно установлено на один из ваших собственных компонентов, чтобы обеспечить   в конечном итоге он отправляется туда и больше никуда.

     

PendingIntent сам по себе является просто ссылкой на токен, поддерживаемый   система, описывающая исходные данные, используемые для их получения.

Итак, PendingIntent - это просто ссылка на данные, представляющие исходное намерение (которое использовалось для создания PendingIntent).

ответил kupsef 17 J0000006Europe/Moscow 2014, 14:25:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132