আমি কী করতে চাই : একটি ব্যাকগ্রাউন্ড থ্রেড চালান যা তালিকাগুলির বিষয়বস্তু গণনা করে এবং তালিকাভিউকে আংশিকভাবে আপডেট করে, ফলাফলগুলি গণনা করা হয়।
আমি যা জানি তা এড়াতে হবে : আমি ব্যাকগ্রাউন্ড থ্রেড থেকে লিস্টএডাপ্টার সামগ্রীগুলিতে গণ্ডগোল করতে পারি না, সুতরাং আমি অ্যাসিঙ্কটাস্ক উত্তরাধিকার সূত্রে পেয়েছি এবং অনপ্রসেসআপডেট থেকে ফলাফল (অ্যাডাপ্টারে এন্ট্রি যুক্ত করে) প্রকাশ করি। আমার অ্যাডাপ্টার ফলাফল অবজেক্টগুলির অ্যারেলিস্ট ব্যবহার করে, সেই অ্যারেলিস্টগুলিতে সমস্ত ক্রিয়াকলাপ সিঙ্ক্রোনাইজ করা হয়।
অন্যান্য লোকের গবেষণা : এখানে খুব মূল্যবান তথ্য রয়েছে । আমি প্রায় 500 list.setVisibility(GONE)/trackList.setVisibility(VISIBLE)
ডলারের ব্যবহারকারীর গ্রুপের জন্য প্রায় দৈনিক ক্র্যাশের শিকার হয়েছিলাম এবং আমি যখন প্রপ্রেসআপেডে ব্লক যুক্ত করেছিলাম তখন 10 এর ফ্যাক্টরটি কমেছিল তবে অদৃশ্য হয়ে যায়নি। (এটি উত্তরে পরামর্শ দেওয়া হয়েছিল )
আমি মাঝে মাঝে যা পেয়েছিলাম : দয়া করে লক্ষ্য করুন, এটি খুব কমই ঘটে (সপ্তাহে একবার 3.5k ব্যবহারকারীর জন্য)। তবে আমি এই বাগটি সম্পূর্ণরূপে মুক্তি দিতে চাই। আংশিক স্ট্যাকট্রেস এখানে:
`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)
[...]
সহায়তার প্রয়োজন? আর দরকার নেই, নীচে দেখুন
শেষ উত্তর: দেখা যাচ্ছে যে, আমি notifyDataSetChanged
ঝাঁকুনি এবং হঠাৎ তালিকার পরিবর্তনগুলি এড়াতে প্রতি 5 টি সন্নিবেশে কল করছি । এটি এমনভাবে করা যায় না, যখন বেস তালিকার পরিবর্তন হয় তখন সর্বদা অ্যাডাপ্টারকে অবহিত করুন। এই বাগটি এখন আমার পক্ষে দীর্ঘকাল ধরে চলেছে।