ListView的非同步載入

2021-07-28 15:37:13 字數 1902 閱讀 2591

建立乙個子執行緒,在子執行緒中建立乙個攜帶object物件的message,將這個message傳送給主線程,然後在主線程中更新ui

//子執行緒

public

void

showimagebythead(imageview iv,final string url);

}.start();

} //主線程

private handler mhandler = new handler();

};

其實asynctask也是基於handler機制的,只不過是經過封裝了,asynctask定義了三種泛型型別 params,progress和result

使用過asynctask 的同學都知道乙個非同步載入資料最少要重寫以下這兩個方法:

有必要的話你還得重寫以下這三個方法,但不是必須的:

我們使用asynctask的**如下:

class

newsasynctask

extends

asynctask

//string...params是可變引數接受execute中傳過來的引數

protected bitmap doinbackground(string... params)

//這裡的bitmap是從doinbackgroud中方法中返回過來的

@override

protected

void onpostexecute(bitmap bitmap)

}

它的主要原理就是把最近使用的物件儲存在linkedhashmap中,並且把最近最少使用的物件在快取值達到預設的值之前從記憶體中移除。那麼它怎麼使用呢?先看乙個例子

private lrucachemmemorycaches;  

int maxmemory = (int) runtime.getruntime().maxmemory();

int cachesizes = maxmemory/5;

mmemorycaches = new lrucache(cachesizes)

};

class

newsasynctask

extends

asynctask

@override

protected bitmap doinbackground(string... params)

return bitmap;

} @override

protected

void onpostexecute(bitmap bitmap)

} }

首先來說說asynctask重寫的4個方法:

doinbackground() //執行在後台執行緒中

onpreexecute() //執行在ui執行緒中

onprogressupdate() //執行在ui執行緒中

onpostexecute() //執行在ui執行緒中

為了正確的使用asynctask類,以下是幾條必須遵守的準則:

task的例項必須在ui thread中建立

execute方法必須在ui thread中呼叫

不要手動的呼叫onpreexecute(), onpostexecute(result),doinbackground(params…), onprogressupdate(progress…)這幾個方法

在listview中,實現 分頁載入 非同步載入

public voidonscroll abslistview view,intfirstvisibleitem,intvisibleitemcount,inttotalitemcount 語句解釋 為了頁面清晰,本範例僅僅將核心 列出來。變數currentpage代表當前已經載入了多少頁的資料。預...

ListView載入原理

listveiw 用來展示列表的view。介面卡 用來把資料對映到listview上 資料 具體的將被對映的字串,或者基本元件。listview的工作原理如下 listview 針對每個item,要求 adapter 返回乙個檢視 getview 也就是說listview在開始繪製的時候,系統首先呼...

listview 分頁載入

模擬請求資料 public class dataserver return data public class mainactivity extends activity override public void onscroll abslistview view,int firstvisiblei...