您好,登錄后才能下訂單哦!
本文首發于cartoon的博客
轉載請注明出處:https://cartoonyu.github.io/cartoon-blog
近段時間有一個需求:在線獲取圖片并且顯示在界面上。因為在線獲取圖片必定會有延遲,如果在主線程中獲取會有很大幾率造成主線程阻塞。解決的辦法是開辟子線程進行網絡訪問。新的問題又出現了:android的UI更新必須在主線程中完成。但是子線程的值脫離線程會無效,造成java.lang.NullPointerException。所以思考了一下決定用android自帶的異步處理機制:Handler,進行消息的回調。
private void downloadImage() {
new Thread(new Runnable() {
@Override
public void run() {
final Bitmap bitmap= ServerImage.downloadFile(); //在線獲取圖片
Looper.prepare();
Message message=new Message();
message.what=0;
message.obj=bitmap;
handler.sendMessage(message);
Looper.loop();
}
}).start();
}
class ImageHandler extends Handler{
@Override
public void handleMessage(Message msg){
//編寫自定義邏輯
switch (msg.what){
case 0:{
}
}
}
}
其中switch中的case與調用handler時定義的msg.what要嚴格一致。
handler對象的定義
定義的時候注意一點:要在子線程外定義。
我嘗試過在子線程內定義,結果在把handler里面得到的圖片賦值給UI組件時發生java.lang.NullPointerException。不清楚什么原因,但是確實挺有趣的,有時間會探求一下里面的原理。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。