標籤:
之前已經為大家奉獻了關於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資訊:
Android線程之Looper