亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

海口市| 连州市| 天柱县| 静海县| 博乐市| 衡阳县| 满洲里市| 临城县| 正宁县| 漳平市| 浪卡子县| 西充县| 宝鸡市| 闻喜县| 福安市| 合肥市| 名山县| 揭西县| 奇台县| 都匀市| 资兴市| 岑溪市| 济源市| 江门市| 江西省| 讷河市| 通河县| 斗六市| 苍山县| 江阴市| 美姑县| 昌乐县| 木兰县| 十堰市| 察哈| 翁牛特旗| 台江县| 威宁| 淮南市| 谷城县| 轮台县|