欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

安卓开发中的handler机制

程序员文章站 2022-05-15 22:37:58
...

这几天写了通信项目,又在写安卓的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相当于负责了在新建的线程接收指令,并根据指令 执行。