안드로이드 스레드 처리의Handler

7083 단어 android
지난 편에서는 Handler의 사용에 대해 간단히 소개했습니다. 이 편에서는 Handler의 고급 사용을 다시 한 번 살펴보겠습니다. 지난 편에서는 UI인터페이스의 업데이트만 간단히 진행했습니다. 이 편에서는 하위 라인의 데이터를 메인 라인에 어떻게 보내서 처리하는지 연구했습니다. 이 문제에 대해많은 동료들이 괴로워했을 거라고 생각합니다. 사실 이것은 매우 간단합니다. 저는 여러분과 마찬가지로 하위 라인에서 메인 라인으로 보내는 것은 불가능하다고 생각했지만 지금은 제 이전의 관점을 진정으로 부정할 수 있습니다. 하위 라인에서 메인 라인으로 데이터를 보내는 것은 전혀 문제가 없습니다.자, 쓸데없는 말은 그만하고 우리 함께 토론해 봅시다.
1. 우리는 Handler와 메시지를 통해 완성한다.
     /*
         *   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();

메시지에서 전송된 데이터 처리:
//    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. 메시지의 사용:
위에서 우리가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;
    }
}

이 메시지의 데이터 처리는 위에서 보여드렸습니다.
여기를 보면 Handler의 강함을 느낄 수 있지 않나요? 확실히 우리가 다선정 문제를 처리할 때Handler는 매우 편리합니다. 관심 있는 사람은 계속 관심을 가질 수 있습니다. 다음 편은 더욱 흥미롭습니다.
 

좋은 웹페이지 즐겨찾기