Ce que je veux faire: exécuter un thread d'arrière-plan qui calcule ListView contenu et mise à jour ListView partiellement, alors que les résultats sont calculés.
Ce que je sais que je dois éviter: je ne plaisante pas avec ListAdapter contenu de thread d'arrière-plan, de sorte que j'ai hérité de AsyncTask et de publier le résultat (ajouter des entrées à la carte) à partir de onProgressUpdate. Mon Adaptateur utilise un ArrayList d'objets du résultat, toutes les opérations sur ces arraylists sont synchronisés.
Recherche d'autres personnes: il y a de précieuses données ici. J'ai également souffert de presque quotidiennement des accidents pour le groupe de ~500 utilisateurs, et quand j'ai ajouté la liste.setVisibility(DISPARU)/trackList.setVisibility(VISIBLE) de bloc dans onProgressUpdate, les accidents abaissé par un facteur de 10, mais pas disparu. (il a été suggéré dans la réponse )
Ce que j'en ai parfois: veuillez noter, il arrive vraiment rarement (une fois par semaine pour l'un de 3.5 k utilisateurs). Mais je voudrais me débarrasser de ce bug complètement. Voici partielle stacktrace:
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)
[...]
De l'aide? Pas plus nécessaire, voir ci-dessous
RÉPONSE FINALE: Comme il s'est avéré, j'étais appelant notifyDataSetChanged
tous les 5 insertions pour éviter le scintillement et de brusques changements dans la liste. Il ne peut pas être fait d'une telle façon, toujours informer de l'adaptateur lorsque la base de modifications de la liste. Ce bug il a disparu depuis longtemps pour moi maintenant.