Android中的Handler

来源:互联网 发布:iphone一键越狱软件 编辑:程序博客网 时间:2024/06/12 22:28

 Handler 主要接受子线程发送的数据, 并用此数据配合主线程更新UI.

每一个Handler对象都维护着一个Handler队列,我们使用Handler对象的post方法把线程加入到我们的Handler队列中。加入到Handler队列中的线程对象会自动的执行。

我们还可以在线程中使用Handler对象的sendMessage方法发送Message对象,发送后,Handler对象的handleMessage方法会接收Message对象并处理。

下面就是一个使用Handler来改变控件按钮的例子;

public class Test extends Activity{private Button button;private Handlerhandler;Runnable runnable=new Runnable(){//线程,用来加入到Handler队列来执行@Overridepublic void run() {Message msg=new Message();Bundle bundle=new Bundle();bundle.putString("txt", "确定");msg.setData(bundle);handler.sendMessage(msg);//在Handler队列中执行线程的run方法的时候,发送Message对象。这个Message对象会触发handleMessage方法、}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.test);button=(Button)findViewById(R.id.button);handler=new Handler(){//生成一个Handler队列,并覆写接收Message对象的方法。public void handleMessage(Message msg) {super.handleMessage(msg);Bundle bundle=msg.getData();//接收MessageString s=bundle.getString("txt");button.setText(s);//用接收到的Message完成Button的修改}};button.setOnClickListener(new OnClickListener(){public void onClick(View v){handler.post(runnable);//把线程加入到Handler队列中}});}}

总结一下这个过程:

(1)创建Handler的子类,并且在Handler子类中覆写handMessage方法用来接收并处理Message对象。

(2)创建Runnable对象的线程,这个线程可以完成我们所需要的异步操作,并使用sendMessage方法来反馈给Handler对象一个Message对象--会触发handMessage方法。

(3)把Runnable对象使用Handler的post方法加入到Handler队列中。加入后,Runnable对象会按照加入的先后顺序执行其run方法。

0 0