Androidスレッド処理のHandler

7031 ワード

前編ではHandlerの使用について簡単に紹介しましたが、本編ではHandlerの高度な使用について検討します.前編ではUIインタフェースの更新を簡単に行うだけで、本編ではサブスレッドのデータをメインスレッドに送信して処理する方法について検討します.この問題について、多くの小さな仲間が困ったことがあると思いますが、実はこれは簡単です.私は以前は皆さんと同じようにサブスレッドからプライマリスレッドに送信することは不可能だと感じていましたが、今は本当に私の前の観点を否定することができます.サブスレッドがプライマリスレッドにデータを送信するのは全く問題ありません.では、くだらないことはあまり言わないで、一緒に検討しましょう.
1、私たちはHandlerとMessageで完成しました.
     /*
         *   int   
         */
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                Message msg = new Message();
                //mes.arg1、mes.arg2、mes.what:    int   
                msg.arg1 = 1;
                msg.arg2 = 2;
                msg.what = 3;
                handler.sendMessage(msg);
            }
        }).start();

Messageから送信されたデータの処理:
//    Handler  ,      handleMessage()  
private Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            if(msg.what==3){
                textview.setText("msg.arg1:"+msg.arg1+"   msg.arg2:"+msg.arg2);
            }else{
                if(msg.what==2){
                    Person person = (Person) msg.obj;
                    textview.setText("  :"+person.getName()+"     :"+person.getSex()+"     :"+person.getYear());
                }
            }
        };
    };

2、Messageの使用:
私たちがHandlerに送信したデータはすべてIntデータで、これはもちろん私たちの日常の需要を満たすことができません.では、どのようにMessageを通じてHandlerにObjectデータを送信しますか?皆さんはMessageがobj()メソッドをカプセル化してくれて、データを伝えるのに便利です.
new Thread(new Runnable() {
        
        @Override
        public void run() {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Person person = new Person();
            person.setName("  ");
            person.setSex("girl");
            person.setYear(22);
            Message msg = new Message();
            msg.what = 2;
            msg.obj = person;
            handler.sendMessage(msg);
        }
    }).start();
}
  Person         :
public class Person {
    private String name;
    private String sex;
    private int year;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getYear() {
        return year;
    }
    public void setYear(int year) {
        this.year = year;
    }
}

このMessageのデータの処理については、すでに上記で示しています.
ここを見てあなたはすでにHandlerの強さを感じているのではないでしょうか.確かに私たちがマルチスレッドの問題を処理するとき、Handlerはとても便利で、興味のある人は引き続き注目することができますよ.次の編はもっとすばらしいです.