建立乙個子執行緒,在子執行緒中建立乙個攜帶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...