我的RecyclerView顯示帶有照片的元素。每張照片都從互聯網上下載,可能需要幾秒鐘的時間。因此,我儘量避免阻塞UI線程,然後將工作傳遞給Handler,但是,由於RecyclerView的回收行爲,它顯示的圖像不正確。
這是它的樣子:
加載圖像1〜表項1.
加載圖像2列表項2.
我向下滾動。
荷載圖像3列出項目20
荷載圖像4至列表項21.
荷載圖像4至列表項20.
荷載圖像5到列表項21.
最後一切正常,但在加載過程中,RecyclerView以錯誤的圖像回收ViewHolders!
我的代碼
mHandler.post(new Runnable() {
@Override
public void run() {
final Uri image = complexFetchingFunction();
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
holder.imageView.setImageURI(image);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
});
末
處理器工作在一個單獨的線程。這是肯定的。 我知道所有這些事情發生,因爲我異步加載圖像和RecyclerView不喜歡它,但否則它是痛苦的緩慢。
有沒有人有解決方案?
處理程序工作的線程誰的instatiate他們的上下文。如果處理程序在UI線程中被安裝,它將在UI線程上運行 – Blackbelt
它不會在UI線程上運行。處理程序的初始化時間稍長一些。 – Ukubu
什麼方法和類包含這裏顯示的代碼? –