在java中使用线程要比在安卓中简单一些,在上篇文章中已经讲过java线程的使用,现在我们谈谈在安卓中应该怎样使用线程呢。
其实在安卓和java中并没有很多不一样,二者使用最大的区别是在安卓中的线程不能直接访问UI,原因我们暂且放在一边,我们先来解决一下在安卓中如何使用线程,让安卓中的线程能够访问UI。
在解决这 个问题之前我们需要了解handle。handle我们可以理解为一个容器,在一个地方将信息存储进去,在另一个地方将信息取出来。下面我们以一个例子来说明一下。
package com.example.move; import android.os.Handler; import android.os.Message; import android.widget.TextView; public class MoveTherad extends Thread{ private TextView text; private int i=0; public MoveTherad(TextView text) { super(); this.text = text; } //创建handle对象,并且取出其中信息在组件上显示信息 Handler hand=new Handler(){ public void handleMessage(Message msg){ String s=(String)msg.obj; text.setText(s); } }; public void run(){ while(true){ try{ Thread.sleep(100); }catch(InterruptedException e){ e.printStackTrace(); } // 存储信息 Message msg=hand.obtainMessage(); msg.obj=String.valueOf(i); hand.sendMessage(msg); i++; } } }
看到这里可能有些人就要问为什么要多此一举把数据存储在取出了,对于这个我也只是做了初步的了解。因为在安卓中启动一个程序时会启动一个主线程,处理UI的线程就是主线程。子线程更新UI是单线程的,在这个过程中通常就会抛出异常!所以需要使用handle作为一个媒介传递UI和子线程之间的信息。有兴趣的小伙伴可以试一下不用handle,看看是不是会报错。
[/flash][/color]