安卓开发中的handler机制

这几天写了通信项目,又在写安卓的socket通信项目。这就避免不了要去了解在安卓的线程用到的handler机制

在JavaSE中也在用线程,于是在写安卓中的线程的时候很自然的就直接写了像JavaSE一样的代码。

比如实现一个简单的无颜值的抽奖软件,需要在新建的线程中调用TextView的setText()方法,这样在java中似乎是很自然的东西,可是如果是在安卓开发时,这样写是不安全的。比如我运行时,就是闪退;

这是为什么?因为在安卓中,主线程是不安全的,是非线程安全的,意思是说 UI的组件创建及更新操作都需要在主线程中进行。

意思是不可以在其他的线程中对UI界面进行操作。

这时候就要用到handler进行线程之间的通信。

很简单的例子,在其他线程中无法进行的操作,我们可以用一个handler来收发信息,在handler中进行对组件的操作。

Handler handler = new Handler() {
	// 在Handler中获取消息,重写handleMessage()方法
	public void handleMessage(Message msg) {
		CJtext.setText((String) msg.obj);	
	}
};
/************下面是线程的run()方法************/

public void run() {
		while (getFlag()) {//这个getFlag()是实现开始与停止按钮的功能
			Random rand = new Random();
			int i = rand.nextInt(100);
			handler.sendEmptyMessage(i);
			try {
				sleep(100);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

 上面的TextView组件的刷新就是在handler的方法中实现的,handler相当于负责了在新建的线程接收指令,并根据指令 执行。

猜你喜欢

转载自flyingfairy.iteye.com/blog/2233917
今日推荐