Android Handler知识点

1,Handdler的创建

**

  1. 注意点:在子线程中创建handler,需要先初始化Looper ,在子线程没有Looper的概念 ,Looper.prepare();//循环消息队列
    其次创建Handler handler = new Handler();,最后 Looper.loop(); 就可以了。在主线程中就不需要初始化Looper,因为主线程中默认就做好了初始化的工作

**

2,Handler消息传递机制——子线程接收主线程发送的消息

private Button btn;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
	btn= (Button) findViewById(R.id.button1);
	new Thread(new MyThread()).start();
	//主线程有一个默认的Looper
	btn.setOnClickListener(new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			Message message = Message.obtain();
			message.obj = "albb";
			mHandler.sendMessage(message);
		}
	});
}

public class MyThread implements Runnable{

	@Override
	public void run() {
		//在子线程没有Looper的概念
		Looper.prepare();//循环消息队列
		//在子线程实例化handler
       mHandler = new Handler(){
    	 @Override
    	public void handleMessage(Message msg) {
    		//子线程中接收主线程发送过来的消息
    		super.handleMessage(msg);
    		System.out.println("--接收主线程获取消息--" );
    	}  
       };
       Looper.loop();
	}
}

3,Handler消息传递机制——主线程接收子线程发送的消息

public class TempTestActivity extends Activity {

private TextView textView;

//在主线程中创建handler
Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what){
            case 3:
                //此处接受到从子线程中发出的消息
                break;
        }
    }
};




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    textView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //创建一个新的线程发送handler的消息
            handler.post(new Runnable() {
                @Override
                public void run() {
                    //在子线程中发送handler消息
                    handler.sendEmptyMessage(3);
                }
            });
        }
    });

}

}

4,Handler ,Message ,Looper , MessageQuen之间的关系

handler通过handler.sendEmptyMessage(3);等一些列的方法将message发送到消息队列messageQuen中,然后looper通过轮询将MessageQuen中的消息取出交给handler处理

你可能感兴趣的:(Handler)