在Android应用程序中,经常使用Handler进行消息处理。一般我们在当前Activity中直接新建一个Handler实例,然后重写其handleMessage方法即可。
如下所示:
Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case MESSAGE_TEST: System.out.println("Receive a test Message!"); Toast.makeText(HandlerTestActivity.this, "Receive a test Message", Toast.LENGTH_LONG).show(); } } };
当我们希望在另一个非主线程上使用Handler对象时,则需要提供一个Looper对象。Android为了方便开发,已经提供了一个HandlerThread,该类在普通线程上,创建了一个Looper对象,方便我们在一个新的线程上创建Handler对象,代码如下:
final HandlerThread testThread = new HandlerThread("test thread"); testThread.start(); testHandler = new AnotherHandler(testThread.getLooper());
class AnotherHandler extends Handler { public AnotherHandler(Looper looper) { super(looper); } public void handleMessage(android.os.Message msg) { switch (msg.what) { case MESSAGE_TEST2: Toast.makeText(HandlerTestActivity.this, "Receive a test2 Message", Toast.LENGTH_SHORT).show(); handler.sendEmptyMessage(MESSAGE_TEST); } } }
<pre name="code" class="java"> Button btn = (Button) findViewById(R.id.test); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub testHandler.sendEmptyMessage(MESSAGE_TEST2); } });