比如我定義了一個實體類,如下
MessageItem{
string title;
string image Url;
……
}
省略號為get和set方法。
現在我用開啟了一個線程請求網頁數據,可是這個網頁只有標題,和內容鏈接。我在這個線程返回的數據中setTitle()的值,可是面對後面鏈接我又得開一個線程來獲取圖片鏈接,可是當我在第二個線程中這樣做的時候,數據已經返回了,即使獲得了圖片鏈接,也沒有存儲到我在第一個線程中創建的實體類中。我在第一個線程中執行玩後調用第二個線程才返回實體類,可是沒等返回第二數據設置,數據就已經返回了。可能不好理解,我配上代碼。
假如我用的某個網絡請求類為okHttp
okHttp.get(url,new CallBack(){
public void success(string response){
MessageItem item =new MessageItem()
......
上面一段解析獲得了,文章標題,和文章內容鏈接。
item.setTitle(title);
因為獲取的是文章鏈接不是圖片鏈接我這個時候又開了一個異步
okHttp.get(contentUrl,new CallBack(){
public void success(string response{
這裡解析後我獲得了圖片鏈接於是我設置
item.setImageUrl(imageUrl)imageUrl;
}
});
return item ;
}
});
假如上面的代碼包裹在一個方法中,返回實體類數據,並設置到Android界面,可是第二個異步還沒執行完,第一個異步獲取的結果就已經返回了,我設置到界面的圖片鏈接就為空。
我知道異步不阻塞UI怎麼保證第二個異步中的數據設置到MessageItem中在返回呢?
可以利用handler來進行這種異步的操作