91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android利用Handler異步獲取子線程中的產生的值

發布時間:2020-04-05 18:47:28 來源:網絡 閱讀:258 作者:ekind8 欄目:移動開發

    本文首發于cartoon的博客
    轉載請注明出處:https://cartoonyu.github.io/cartoon-blog

    近段時間有一個需求:在線獲取圖片并且顯示在界面上。因為在線獲取圖片必定會有延遲,如果在主線程中獲取會有很大幾率造成主線程阻塞。解決的辦法是開辟子線程進行網絡訪問。新的問題又出現了:android的UI更新必須在主線程中完成。但是子線程的值脫離線程會無效,造成java.lang.NullPointerException。所以思考了一下決定用android自帶的異步處理機制:Handler,進行消息的回調。

  1. 線程的開辟。
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();

    }
  1. 自定義Handler。
class ImageHandler extends Handler{
        @Override
        public void handleMessage(Message msg){
            //編寫自定義邏輯
            switch (msg.what){
                case 0:{

                }
            }
        }
    }

         其中switch中的case與調用handler時定義的msg.what要嚴格一致。

  1. handler對象的定義

         定義的時候注意一點:要在子線程外定義。

         我嘗試過在子線程內定義,結果在把handler里面得到的圖片賦值給UI組件時發生java.lang.NullPointerException。不清楚什么原因,但是確實挺有趣的,有時間會探求一下里面的原理。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凌海市| 公安县| 林西县| 玉门市| 禹城市| 通渭县| 阳曲县| 陈巴尔虎旗| 林西县| 吉木乃县| 稻城县| 久治县| 鄂温| 府谷县| 康定县| 盘锦市| 伊金霍洛旗| 湟源县| 商河县| 江城| 靖宇县| 开远市| 天水市| 治多县| 新疆| 庆安县| 永福县| 丹巴县| 灵川县| 民权县| 兴化市| 巢湖市| 屯留县| 颍上县| 乐安县| 拜泉县| 新昌县| 岫岩| 县级市| 南靖县| 襄垣县|