Android线程与消息处理

1、实现多线程

1.建立线程 (1)经过Thread建立线程bash

Thread thread = new Thread(new Runnable(){
	@Override
	public void run() {
		// TODO Auto-generated method stub
	}
});
复制代码

(2)经过实现Runnable()接口建立线程多线程

public class MainActivity extends Activity implements Runnable{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

	@Override
	public void run() {
		// TODO Auto-generated method stub
		
	}
}
复制代码

2.线程的开启ide

thread.start();
复制代码

3.线程的休眠oop

Thread.sleep(1000);//休眠1秒
复制代码

4.中断线程post

public class MainActivity extends Activity implements Runnable{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        LooperThread thread = new LooperThread();
        thread.start();
        thread.interrupt();
    }

    	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(!Thread.currentThread().isInterrupted()){
			// do something
		}
	}
}
复制代码

2、Handler消息传递机制

前面介绍了现成的用法,不过不能在新建的子线程中对UI进行修改。若是要操做,会报错Only the original thread that created a view hierarchy can touch its views。为此,Android引入Handler消息传递机制,来实如今线程中操做UI界面。ui

1.循环者(Looper)简介 在Android中,一个线程对应一个Looper对象,一个Looper对象对应一个MessageQueue(消息队列)。MessageQueue用于存放message。在MessageQueue中,存放的消息按照FIFO原则执行。spa

Looper对象用来为线程开启一个消息循环,从而操做MessageQueue。默认状况下,系统自动为主线程建立Looper对象,开启消息循环。因此,在主线程中用下面的代码建立Handler对象不会出错,而在非主线程中则会报错。线程

Handler handler = new Handler();
复制代码

若是想在非主线程中建立Handler对象,必须用到Looper:code

public class LooperThread extends Thread {
	public Handler h;

	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		
		Looper.prepare();			//
		
		h = new Handler(){
			@Override
			public void handleMessage(Message msg) {
				// TODO Auto-generated method stub
				Log.i("Looper", String.valueOf(msg.what));
			}
		};
		Message m = h.obtainMessage();
		m.what = 0x11;
		h.sendMessage(m);
		
		Looper.loop();
	}
}
复制代码

2.消息处理类(Handler)简介对象

Handler主要有如下两个做用: (1)将Message或Runnable应用post()或sendMessage()方法发送到MessageQueue中,发送时能够指定延迟时间或者绑定的Bundle数据。当MessageQueue循环到该Message时,调用handlerMessage()方法对其处理。

(2)在子线程与主线程进行通讯,也就是在工做线程中与UI进行通讯

3.消息类(Message)简介 Message具备以下5个属性

1.arg1 int 用来存放整型数据 2.arg2 int 用来存放整型数据 3.obj Object用来存放发送给接收器的Object类型的任意对象 4.replyTo Messenger用来指定该Message该发往何处 5.what int 用户自定义消息代码 在使用时,须要注意如下3点:

1.一般使用Message.obtain()或Handler.obtainMessage()获取空消息对象,以节省资源 2.若是一个Message只须要携带简单的int信息,优先使用arg1和arg2来传递,这比Bundle节省内存 3.尽量用Message.what来标识信息

相关文章
相关标签/搜索