Ce que je veux faire : exécuter un thread d'arrière-plan qui calcule le contenu de ListView et met à jour partiellement ListView, pendant que les résultats sont calculés.
Ce que je sais que je dois éviter : je ne peux pas jouer avec le contenu de ListAdapter du thread d'arrière-plan, j'ai donc hérité d'AsyncTask et publié le résultat (ajouter des entrées à l'adaptateur) de onProgressUpdate. Mon adaptateur utilise ArrayList des objets de résultat, toutes les opérations sur ces arraylists sont synchronisées.
Recherche d'autres personnes : il y a ici des données très précieuses . J'ai également souffert de plantages presque quotidiens pour un groupe d'environ 500 utilisateurs, et lorsque j'ai ajouté un list.setVisibility(GONE)/trackList.setVisibility(VISIBLE)
bloc dans onProgressUpdate, les plantages ont été réduits d'un facteur 10 mais n'ont pas disparu. (il a été suggéré en réponse )
Ce que j'ai parfois : remarquez, cela arrive très rarement (une fois par semaine pour l'un des 3,5k utilisateurs). Mais j'aimerais me débarrasser complètement de ce bug. Voici un stacktrace partiel:
`java.lang.IllegalStateException:` The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131296334, class android.widget.ListView) with Adapter(class com.transportoid.Tracks.TrackListAdapter)]
at android.widget.ListView.layoutChildren(ListView.java:1432)
at android.widget.AbsListView.onTouchEvent(AbsListView.java:2062)
at android.widget.ListView.onTouchEvent(ListView.java:3234)
at android.view.View.dispatchTouchEvent(View.java:3709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:852)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
[...]
Aidez-moi? Plus besoin, voir ci-dessous
RÉPONSE FINALE: Il s'est avéré que j'appelais notifyDataSetChanged
toutes les 5 insertions pour éviter le scintillement et les changements soudains de liste. Cela ne peut pas être fait de cette manière, avertissez toujours l'adaptateur lorsque la liste de base change. Ce bug est parti depuis longtemps pour moi maintenant.