中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

肥乡县| 梨树县| 辽宁省| 石景山区| 济源市| 抚州市| 闽侯县| 包头市| 白银市| 西乌珠穆沁旗| 徐水县| 新密市| 延边| 锡林郭勒盟| 留坝县| 土默特右旗| 聂荣县| 彰化市| 黔南| 齐齐哈尔市| 三门县| 蕲春县| 镇康县| 建水县| 迁西县| 政和县| 临猗县| 任丘市| 永昌县| 承德县| 息烽县| 江门市| 集安市| 余庆县| 海淀区| 和硕县| 陕西省| 萍乡市| 广汉市| 页游| 金寨县|