Ne yapmak istiyorum : sonuçları hesaplanırken ListView içeriğini hesaplar ve ListView kısmen güncelleme bir arka plan iş parçacığı çalıştırın.
Ne kaçınmak zorunda biliyorum : Ben arka plan iş parçacığından ListAdapter içeriği ile karışıklık yapamam, bu yüzden AsyncTask devralındı ve onProgressUpdate gelen sonuç (bağdaştırıcı girdileri ekleyin) yayımlayın. Bağdaştırıcım, sonuç nesnelerinin ArrayList'ini kullanır, bu dizicilerdeki tüm işlemler senkronize edilir.
Diğer insanların araştırması : Burada çok değerli veriler var . Ayrıca ~ 500 kullanıcı grubu için neredeyse günlük çökmelerden muzdarip oldum list.setVisibility(GONE)/trackList.setVisibility(VISIBLE)
ve onProgressUpdate'e blok eklediğimde, 10 kat azaltılmış ancak yok olmamış çökmeler. ( cevapta önerildi )
Bazen ne aldım : lütfen dikkat edin, nadiren gerçekleşir (3.5k kullanıcıdan biri için haftada bir kez). Ama bu hatadan tamamen kurtulmak istiyorum. İşte kısmi yığın izlemesi:
`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)
[...]
Yardım? Artık gerekmiyor, aşağıya bakın
SON CEVAP: Görünüşe göre , notifyDataSetChanged
her 5 eklemeyi titremeyi ve ani liste değişikliklerini önlemek için çağırıyordum . Bu şekilde yapılamaz, temel liste değiştiğinde her zaman adaptöre haber verin. Bu böcek uzun zamandır benim için gitti.