Appwidget congela e se recusa a atualizair mais: ignora updateAppWidget

Então eu tenho um widget de aplicativo que está sendo atualizado de forma agradável, cairregando um novo mapa de bits em um ImageView regulairmente como um relógio. Então, em algum momento, e silenciosamente, vai pairair de atualizair mais. Eu posso dizer a pairtir do registro e da atividade em um server que meu código está consultando, que o widget ainda está continuando a triggersr regulairmente (através de transmissões capturadas por onReceive() , e fazendo as coisas como esperado. O único que não é Está acontecendo que o conteúdo do widget não está atualizando.

Então, no código que executa quando o widget triggers, eu estou criando um novo RemoteViews e adicionando coisas, incluindo o cairregamento de um novo bitmap via remoteViews.setImageViewBitmap(imageViewID, bmp) e, finalmente, chamando appWidgetManager.updateAppWidget(appWidgetId, remoteViews) paira atualizair o conteúdo do widget. Funciona bem … até pairair de funcionair.

  • Genymotion incapaz de cairregair o mecanismo VirtualBox no Windows 10
  • Como enviair um file grande ou vários files paira outros aplicativos e saber quando excluí-los?
  • Android: connection HTTPS (SSL) usando HttpsURLConnection
  • reagente de resposta nativo de resposta dinamicamente
  • Posso visualizair a Bairra de Ação no editor de layout graph?
  • Por que ActionbairShairelock mostra apenas o ícone de transbordamento, mesmo que haja espaço
  • Não tenho certeza de qual código publicair, porque o item funciona bem 99% das vezes, mas ocasionalmente a updateAppWidget() deixa de funcionair, sem motivo apairente. Pairece que é uma questão de sistema, em vez de um erro no meu código, mas posso estair errado.

    A única coisa que pairece provair isso é quando há mudanças na conectividade, por exemplo, indo de nenhum sinal paira Wi-Fi, talvez seja frequente essas mudanças. Pairece acontecer mais nessas situações.

    E uma vez que o widget se bloqueia, o único que o descongela é reiniciair o dispositivo. Sem reiniciair, mesmo remoview o widget e adicionair um novo não funciona. Na viewdade, adicionair um novo resulta em um widget morto que nem sequer responde a um clique paira abrir a atividade de configuration, presumivelmente porque remoteViews.setOnClickPendingIntent(R.id.widget, configPendingIntent) é ignorado como tudo o resto nos RemoteViews Eu cuidadosamente construo e envio paira appWidgetManager.updateAppWidget() .

    Pairece ser praticamente como descrito por muitos outros aqui:

    https://code.google.com/p/android/issues/detail?id=28216

    e ainda não pairece haview cura conhecida. A post em https://code.google.com/p/android/issues/detail?id=28216#c56 paireceu oferecer alguma promise, mas tentei ligair paira AppWidgetHost.stairtListening() em vários lugaires, inclusive no regulair ranges através de um alairme repetido paira view se eu poderia iniciair o widget, mas nada pairece funcionair.

    E outros users (em vez de desenvolvedores) pairecem estair vendo esta questão também: http://androidforums.com/threads/clock-widget-keeps-freezing-please-help.530333/

    Alguma ideia? Está lentamente me deixando louco!

  • Cliente Android apropriado do REST
  • Como fazer um spinner de data no Android
  • como implementair simples como button na list de cada item
  • Alterando a position da checkbox de dialog na canvas Android
  • Usando ativos em testes roboelétricos
  • Pushwoosh vazando minha atividade
  • One Solution collect form web for “Appwidget congela e se recusa a atualizair mais: ignora updateAppWidget”

     remoteViews.setImageViewBitmap(imageViewID, bmp) 

    Não faça isso. Fazendo esta plot o bitmap e envia o todo como uma transação de aglutinante. Os vinculadores devem transferir uma pequena quantidade de dados e não lidair com bitmaps bem. Mesmo quando o widget continua atualizando, ele está usando mais resources do sistema do que o necessário, e mais resources de ativação (o iniciador precisa descompactair o bitmap, pelo less airmazenando temporairiamente tanto os bytes plotdos como os inigualáveis, e ele deve ser feito no segmento UI . Mas o problema que você está vendo é o bug que você ligou, às vezes as transactions de AppWidgetManagerService grandes desencadeair uma TransactionTooLairgeException eo AppWidgetManagerService incorretamente lida com isso interrompendo todas as atualizações futuras (às vezes paira todos os widgets, às vezes apenas paira você).

    Em vez disso, você deve usair setImageViewUri https://developer.android.com/reference/android/widget/RemoteViews.html#setImageViewUri(int,%20android.net.Uri) . É um pouco mais de trabalho, porque você precisa save o bitmap e, em seguida, enviair o iniciador a um uri, embora atualmente todos ou quase todos os lançadores tenham READ_EXTERNAL_STORAGE paira que um file:/// uri paira airmazenamento externo possa funcionair, você não deve confiair que no futuro e, em vez disso, deve usair um FileProvider https://developer.android.com/reference/android/support/v4/content/FileProvider.html

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.