Pergunta

Eu não estou tendo muita sorte com a atualização de um widget aplicativo com AlarmManager gerado transmissões. Aqui está o que eu faço:

A inicialização AlarmManager em AppWidgetProvider#onEnabled

AlarmManager alarms = (AlarmManager) context.getSystemService(
        Context.ALARM_SERVICE);
    alarms.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
    SystemClock.elapsedRealtime(), 60000, pendingIntent);

Eu também definir receptor de radiodifusão que simplesmente escuta para as atualizações que disparados pelo AlarmManager. Quando a atualização é disparado código é executado AsyncTask que faz uma chamada de rede. Quando o AsyncTask é concluída (onPostExecute) ele usa instância previamente obtida de AppWidgetManager para atualizar o widget (s). Tudo realmente funciona bem até que nos logs vejo "Process com.foo.myapp (pid 12345) has died" mensagem após o qual o AlarmManager nunca dispara outra atualização.

Eu preciso ter algum tipo de verificação que irá reiniciar os alarmes? Por exemplo, quando o acesso do usuário do aplicativo pai do widget? Como posso garantir que eu possa completar a tarefa de longa duração e voltar para o widget se meus morre de aplicativos no meio do pedido?

Foi útil?

Solução

Quando atualização é disparados código é executado AsyncTask que faz uma chamada de rede.

Se isto está dentro do BroadcastReceiver, que não vai funcionar. Você pode threads não segura garfo de um BroadcastReceiver e AsyncTask bifurca efetivamente um fio para fazer a sua tarefa de forma assíncrona.

Em vez disso, você deve delegar longa trabalho para um serviço iniciado a partir do alarme BroadcastReceiver.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top