Android中的Handler与多线程应用实例
本文首先解释一下handler是用来干嘛的,然后通过例子介绍其在多线程中的应用。
什么是Handler
handler通俗一点讲就是用来在各个进程之间发送数据的处理对象。在任何进程中,只要获得了另一个进程的handler则可以通过handler.sendMessage(message)方法向那个进程发送数据。基于这个机制,我们在处理多线程的时候可以新建一个thread,这个thread拥有UI线程中的一个handler。当thread处理完一些耗时的操作后通过传递过来的handler像ui线程发送数据,由UI线程去更新界面。
handler应用多线程例子
我们这个例子是实现一个简单的词典功能。在获取网页过程中应用线程。这个程序共有两个activity,第一个用于输入查询的单词,第二个activity用于显示结果。我们直接看第二个activity的内容。(第一个activity无非是获得用户输入的单词然后传给activity2,还没有掌握的可以看我前面的文章)
首先来看OnCreate:
@Override protectedvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.queryresult);
tvResult=(TextView)findViewById(R.id.tvResult); StringqueryString=getIntent().getStringExtra("query");
Log.d("threadId:",String.valueOf(Thread.currentThread().getId()));
//声明一个handler,它的处理程序是实现了callback的类,这里我将这个activity继承了 //callback,所以可以传入this。 handler=newHandler(this); //新建一个线程(我们自己实现的线程),将上面的handler和查询的单词传入构造函数 GetHtmlThreadthread=newGetHtmlThread(handler,getIntent() .getStringExtra("query")); //开始线程 thread.start();
progressBar=(ProgressBar)findViewById(R.id.prb); progressBar.setVisibility(View.VISIBLE); }