Я прочитал несколько статей, и оба, похоже, делают одно и то же, и мне было интересно, в чем разница между запуском такой службы:
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;
android
android-service
user3629316
источник
источник
Ответы:
Намерение
Android Intent - это объект, несущий намерение, то есть сообщение от одного компонента другому компоненту внутри или вне приложения. Намерения могут передавать сообщения между любым из трех основных компонентов приложения - Activity, Services и BroadcastReceivers.
Само намерение, объект Intent, представляет собой пассивную структуру данных. Он содержит абстрактное описание операции, которую необходимо выполнить.
Например: скажем, у вас есть Activity, которому нужно запустить почтовый клиент и отправить электронное письмо. Для этого ваша Activity отправит Intent с действием
ACTION_SEND
вместе с соответствующим средством выбора в Android Intent Resolver:Указанное средство выбора дает пользователю соответствующий интерфейс, чтобы выбрать способ отправки данных электронной почты.
ЯВНЫЕ УМЫШЛЕНИЯ
ПОДРАЗУМЕВАЕМЫЕ НАМЕРЕНИЯ
Ожидаемое намерение
PendingIntent - это токен, который вы даете внешнему приложению (например, NotificationManager, AlarmManager, Home Screen AppWidgetManager или другим сторонним приложениям), который позволяет стороннему приложению использовать разрешения вашего приложения для выполнения заранее определенного фрагмента кода.
Пример ожидающего намерения: http://android-pending-intent.blogspot.in/
Источник: Android Intents и Android В ожидании Intents
Надеюсь это поможет.
источник
PendingIntent
это оберткаIntent
. Внешнее приложение, которое получает объектPendingIntent
, не знает, что его содержимоеIntent
обернутоPendingIntent
. Задача стороннего приложения - отправить обратно намерение владельцу при выполнении некоторых условий (например: сигнал тревоги с расписанием или уведомление с щелчком ...). Условия задаются владельцем, но обрабатываются сторонним приложением (например: тревога, уведомление).Если иностранное приложение отправило намерение вашему приложению, это означает, что иностранное приложение знает о содержании намерения. и стороннее приложение принимает решение об отправке намерения, тогда ваше приложение должно обрабатывать намерение для удовлетворения некоторых условий => ваше приложение получает ресурс производительности системы.
источник
Еще одно простое отличие:
Обычное намерение умрет, как только приложение будет убито.
Незавершенные намерения никогда не умирают. Они будут живы до тех пор, пока это необходимо для службы сигнализации, службы определения местоположения или любых других служб.
источник
Регулярный запуск сервисов через AlarmManager
Как и в случае с действиями, система Android может прекратить процесс обслуживания в любое время для экономии ресурсов. По этой причине вы не можете просто использовать
TimerTask
в службе, чтобы гарантировать, что она выполняется на регулярной основе.Итак, для правильного планирования Сервиса используйте
AlarmManager
класс.ОБНОВИТЬ:
Так что на самом деле между ними нет никакой разницы. Но в зависимости от того, хотите ли вы обеспечить выполнение услуги или нет, вы можете решить, что использовать, поскольку для первого нет гарантии, а для более позднего - да.
Больше информации на AndroidServices .
источник
getApplicationContext()
и не используйте его, когда вы этого хотите, просто прочтите - when-to-call-activity-context-or-application-context ( stackoverflow.com/questions/7298731/… ).Функционально разницы нет.
Значение PendingIntent состоит в том, что вы можете передать его другому приложению, которое позже может использовать его, как если бы это другое приложение было вами. Вот соответствующее объяснение из документации :
Итак, PendingIntent - это просто ссылка на данные, представляющие исходное намерение (которое использовалось для создания PendingIntent).
источник