Italian Chiacchiericci

Sagenut

Expert
Licensed User
Longtime User
Bravissimo.
Adesso stacco anche io e passo alla vita normale.
 

Sagenut

Expert
Licensed User
Longtime User
Metti un programma per controllare le temperature.
Forse è un pò incasinato e c'è qualche processo che fà lavorare inutilmente il processore?
Qualche porcheria che si è intrufolata?
 

LucaMs

Expert
Licensed User
Longtime User
Forse è un pò incasinato e c'è qualche processo che fà lavorare inutilmente il processore?
Qualche porcheria che si è intrufolata?
Non ne ho idea, se c'è è ben nascosto, perché tra i processi attivi ce n'era solo uno e con 1% di tempo CPU occupato (il task manager, se ricordo bene) però poi, guardando le prestazioni, utilizzo CPU andava dal 25% in su :eek:
 

Sagenut

Expert
Licensed User
Longtime User
Per popolare la lista contatti ho usato la classe ContactUtils che dovrebbe essere velocissima nella lettura.
Per qualche motivo a me impiega diversi secondi per effettuare la lettura.
Dovrò verificare che non ci sia qualche loop non previsto.
Qualcuno ha avuto esperienze con questa classe?
 

Sagenut

Expert
Licensed User
Longtime User
Su device reale impiega circa 8 secondi per mostrare 208 contatti.
Ma probabilmente ho sbagliato qualcosa io.
In un test precedente popolavo una ListView e il risultato era praticamente istantaneo.
Ora popolo una XCLV dove creo pannelli con l'immagine e il nome.
Vedrò con l'esecuzione Step by Step che non abbia commesso errori che fanno fare giri strani.
 

Sagenut

Expert
Licensed User
Longtime User
Ho postato la mia domanda sul forum internazionale così vedo se faccio una figura di M in Eurovisione.
Tanto probabilmente riceverò risposta solo lunedì.
 

udg

Expert
Licensed User
Longtime User
Ho letto ora.
Credo che dovresti provare a memorizzare in una List quanto ritornato da FindAllContacts (o come si chiama) e poi eseguire il For each sulla lista.
Ho il sospetto che il codice attuale richiami la creazione di una lista ad ogni giro del loop..
Qlacosa tipo:
B4X:
clist as list = cu.FindAllContacts(True)
For Each c As cuContact In clist
..
 

LucaMs

Expert
Licensed User
Longtime User
Estrapola quella parte, mettila in un progettino di prova e pubblicalo qui, così gli diamo un'occhiata.

Non penso sia il tuo caso, visto che 208 non sono tanti, ma, anche per eventuali altri casi in cui ti dovesse servire, c'è questo codice di Erel:
https://www.b4x.com/android/forum/threads/b4x-xui-customlistview-lazy-loading-virtualization.87930/

In pratica serve a non caricare subito tutti gli elementi della XCLV ma solo quando necessario, così da evitare una lunga attesa iniziale se questi fossero parecchi (ma parecchi quanto? E poi dipende anche da quante view metti all'interno di ciascun elemento - notare che non ho scritto "Item" :p)
 

Sagenut

Expert
Licensed User
Longtime User
Il problema volendo si verifica solo la prima volta che viene chiesto il permesso.
Poi potrei fare in modo che la lista venga popolata all'avvio dell'app e quindi probabilmente l'utente non entrerebbe nella lista prima e la troverebbe già pronta.
Se poi chiedessi il permesso immediatamente la prima volta all'avvio della app invece che nel momento della prima visualizzazione forse eviterei anche la prima attesa.
 

Sagenut

Expert
Licensed User
Longtime User
Perché ora richiedo il permesso solo nel momento che l'utente per la prima volta apre il panel dove vengono visualizzati i contatti.
Dal momento del permesso, o successive aperture del panel, passano quei 7 secondi prima che i contatti appaiano.
 

LucaMs

Expert
Licensed User
Longtime User
Non posso nemmeno buttare giu un progetto di prova, sia perché non arrivo a 208 contatti manco lontanamente :D, sia perché in questo momento l'unico smartphone con scheda SIM gli è scarico.

Avrei solo voglia di fare musica!!!
 

LucaMs

Expert
Licensed User
Longtime User
Avrei solo voglia di fare musica!!!
Dovreste sentirmi cantare, soprattutto questo...

Mio padre, essendo di un'altra epoca, amava la lirica, per cui ogni tanto mi piace cantare...

"di quella PIZZA l'orrendo COCO"

Immagino conosciate almeno vagamente quel "brano", quindi la sua metrica; beh, provate a cantarla, ci sta bene anche:

"di quella pira l'orrendo foco"
"ma con gran pena le reca giù"


(ok, concordo, chiamate pure la neuro :p)


Mio padre, essendo di un'altra epoca, amava la lirica
Io, invece, essendo moderno, sto ascoltando Piergiorgio Farina :p
 

Sagenut

Expert
Licensed User
Longtime User
Come mi pare che accada anche per il il S.O. Android.....il Permesso per leggere i contatti ti viene chiesto la prima volta che accedi alla rubrica.
Io ho fatto lo stesso.....il Permesso viene richiesto la prima volta che apri la schermata che te li dovrebbe mostrare.
Ovviamente il caricamento degli stessi inizia solo da quando il permesso viene concesso e da lì passano i fatidici 7 secondi prima di mostrarli.
7 secondi che passeranno poi ogni volta ai successivi avvii dell'app perchè ora i contatti vengono caricati solo quando si apre quella schermata.
Evidentemente la soluzione migliore è chiedere subito tutti i permessi all'avvio dell'app e anche caricare fin da subito la lista contatti in modo che poi entrando nella schermata la si trovi bella e pronta.
Evidentemente la funzione è molto rapida nella sola visualizzazione dei nomi.
Io invece carico la lista con nomi e immagini.
Tutto sommato problema risolto.
Nel forum internazionale ho solo chiesto se quel lasso di tempo è normale per la ContactUtils.
 

LucaMs

Expert
Licensed User
Longtime User
Non so come funzioni la classe ma ho visto che richiede la libreria SQL, il che mi fa pensare che i contatti vengano copiati in un db sqlite.
Se fosse così, ad ogni avvio dell'app (dovuque tu metta il caricamento dei contatti), vengano letti i contatti ma inseriti nel db solo gli eventuali nuovi contatti.
Perlomeno spero sia così (altrimenti a che serve la libreria SQL?).

Quei 7 secondi, che a me sembrano tanti... bisognerebbe sapere con certezza a cosa siano dovuti; è probabile che siano dovuti al caricamento di TUTTI i contatti nella xCLV e che dovendo caricare anche le immagini impieghi quel tempo.

Se è così (io al posto tuo proverei un progetto che faccia solo questo, in modo da poterlo studiare meglio) la soluzione potrebbe essere quella che ti ho suggerito in un post precedente:
https://www.b4x.com/android/forum/threads/b4x-xui-customlistview-lazy-loading-virtualization.87930/
 

LucaMs

Expert
Licensed User
Longtime User
Davvero strano: ho scaricato quella classe (o meglio tutto il progetto) ContactsUtils e, malgrado richieda appunto la libreria SQL, non ne fa uso.
Probabilmente chi ne ha bisogno è in realtà la libreria ContentResolver :eek:
 
Top