Ho un widget che deve eseguire un'operazione potenzialmente di lunga durata in onUpdate(). l'esecuzione dell'operazione ha comportato direttamente gli ANR. per risolvere questo, il mio primo tentativo è stato quello di creare un thread in esso. ho notato che il widget non si aggiornava in alcuni casi. la mia ipotesi è che una volta che onUpdate() si chiude, Android potrebbe terminare il processo insieme al thread non finito.operazione Android long-running per aggiornare una appwidget
il mio prossimo tentativo è stato creare un servizio di intenti. il widget suUpdate() avvia il servizio intent, che esegue direttamente il lavoro e aggiorna il widget al termine. questo funziona, ma con mia grande sorpresa sembra che onHandleIntent() sia single threaded. se ho due widget e quindi aggiorno e avvio il servizio intent, essi aggiornano in sequenza ...
il caso dei due widget non è molto importante, ma mi sto solo chiedendo una procedura ottimale per questo tipo di pattern .
per risolvere il caso dei due widget ho finito per aggiornare tutte le istanze del widget con gli stessi dati ogni volta che si fa clic su uno di essi. ad esempio, eseguo una volta il processo a esecuzione lunga e applico i risultati a tutte le istanze del widget. nel mio scenario questo non ha importanza, ma per molti widget potrebbe essere importante non farlo.
pensieri?
ok se capisco correttamente. 1) il widget avvia il servizio intent per ottenere i dati e aggiorna il widget quando è terminato 2) il servizio intent ottiene un wake lock e avvia un thread per eseguire il lavoro effettivo e quindi aggiorna il widget quando ha finito 3) al termine del thread, rilascia la serratura. ragazzo che sembra complicato. perché non riesco a prendere un blocco su onHandleIntent() stesso? –
@ farble1670: perché il dispositivo potrebbe addormentarsi prima di arrivare. – CommonsWare
scusate, volevo dire aggrapparmi a suHandleUpdate(), nel app appwidget. che cosa mi ha fatto inviare la richiesta a un servizio di intenti? –