安卓开发中的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相当于负责了在新建的线程接收指令,并根据指令 执行。