Li alguns artigos e ambos parecem fazer a mesma coisa e fiquei imaginando qual é a diferença entre iniciar o serviço assim:
Intent intent = new Intent(this, HelloService.class);
startService(intent);
ou assim:
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);
Conforme eu leio, esses dois fazem a mesma coisa, se no serviço você retornar um parâmetro START_STICKY;
android
android-service
user3629316
fonte
fonte
Respostas:
Intenção
Um Android Intent é um objeto que carrega um intent, ou seja, uma mensagem de um componente para outro componente, dentro ou fora do aplicativo. Os intents podem comunicar mensagens entre qualquer um dos três componentes principais de um aplicativo - Activities, Services e BroadcastReceivers.
A própria intenção, um objeto Intent, é uma estrutura de dados passiva. Ele contém uma descrição abstrata de uma operação a ser executada.
Por exemplo: digamos que você tenha uma atividade que precisa iniciar um cliente de email e enviar um email. Para fazer isso, sua Activity enviaria um Intent com a ação
ACTION_SEND
, junto com o seletor apropriado, para o Android Intent Resolver:O seletor especificado fornece a interface adequada para o usuário escolher como enviar seus dados de e-mail.
INTENÇÕES EXPLICITAS
INTENÇÕES IMPLÍCITAS
Intenção Pendente
Um PendingIntent é um token que você dá a um aplicativo externo (por exemplo, NotificationManager, AlarmManager, Home Screen AppWidgetManager ou outros aplicativos de terceiros), que permite ao aplicativo externo usar as permissões de seu aplicativo para executar um trecho predefinido de código.
Exemplo de intenção pendente: http://android-pending-intent.blogspot.in/
Fonte: Android Intents e Android Pending Intents
Espero que isto ajude.
fonte
PendingIntent
é um invólucro deIntent
. O aplicativo estrangeiro que recebe oPendingIntent
não sabe o conteúdo doIntent
qual está envolvidoPendingIntent
. A missão do aplicativo estrangeiro é enviar de volta a intenção ao proprietário quando algumas condições forem atendidas (por exemplo: alarme com programação ou notificação com clique ...). As condições são fornecidas pelo proprietário, mas processadas pelo aplicativo externo (por exemplo: alarme, notificação).Se o aplicativo estrangeiro enviou uma intenção para o seu aplicativo, significa que o aplicativo estrangeiro conhece o conteúdo da intenção. e o aplicativo externo toma a decisão de enviar a intenção, então seu aplicativo deve processar a intenção para atender a algumas condições => seu aplicativo obtém o recurso de desempenho do sistema.
fonte
Outra diferença simples:
A intenção normal morrerá assim que o aplicativo for encerrado.
As intenções pendentes nunca morrem. Eles estarão vivos enquanto for necessário pelo serviço de alarme, serviço de localização ou quaisquer outros serviços.
fonte
Iniciando serviços regularmente através do AlarmManager
Tal como acontece com as atividades, o sistema Android pode encerrar o processo de um serviço a qualquer momento para economizar recursos. Por esse motivo, você não pode simplesmente usar um
TimerTask
no serviço para garantir que ele seja executado regularmente.Assim, para o correto agendamento do Serviço utilize a
AlarmManager
aula.ATUALIZAR:
Portanto, não há diferença real entre os dois. Mas dependendo se você quer garantir a execução do serviço ou não, você pode decidir o que usar, pois para o primeiro não há garantia e para o posterior sim.
Mais informações em AndroidServices .
fonte
getApplicationContext()
ou use quando quiser estritamente, apenas leia - when-to-call-activity-context-or-application-context ( stackoverflow.com/questions/7298731/… ).Funcionalmente, não há diferença.
O significado de PendingIntent é que você pode manipulá-lo para outro aplicativo que mais tarde poderá usá-lo como se o outro aplicativo fosse você. Aqui está a explicação relevante da documentação :
Portanto, PendingIntent é apenas uma referência aos dados que representam o Intent original (que foi usado para criar o PendingIntent).
fonte