之前已经为大家奉献了关于Handler和Message的使用,本篇我们来了解一下Handler内部的具体使用,本篇主要探讨Looper的在处理Handler的消息机制中起的重要作用,我们知道我们在子线程向主线程发生消息通过sendMessage()方法,Handler处理消息则是通过handMessage()方法,内部的消息传递机制,下面我们一起来探讨一下。
为了方便大家的理解,这里我以一个日常生活中的例子来为大家介绍一下Handler、Looper的处理细节:例子讲述的是我们开会时,要去上厕所。
看到上面的例子,我想大家对于Looper一定有了一个很好的认识。
自建Thread类中实现Handler对象:
public class MainActivity extends Activity { private Handler firstHandler = new Handler(){ public void handleMessage(android.os.Message msg) { System.out.println("UI------->:"+Thread.currentThread()); }; }; class Mythread extends Thread{ private Handler handler; @Override public void run() { Looper.prepare();//创建一个Looper对象 handler = new Handler(){ @Override public void handleMessage(Message msg) { System.out.println("子线程:"+Thread.currentThread()); } }; Looper.loop();//通过这个方法循环处理方法 } }; private Mythread thread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); thread = new Mythread(); thread.start(); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } thread.handler.sendEmptyMessage(1);//在子线程中处理 firstHandler.sendEmptyMessage(1);//在主线程中处理 } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
LogCat信息:
时间: 2024-10-11 13:07:56