handler
来自个人维基
介绍
原来这里放的一片文章,啰里啰唆半天讲不清楚,放到讨论里面去了。
Handler 是用来从一个线程向另一个线程发消息的,在Android系统中不管构架还是应用程序中都有广泛的应用。例如Android网络管理。
new Handler的时候,本线程必须调用过Looper.prepare();
且本线程必须以Looper.loop()结尾, 即使本进程别的线程调用了Looper.loop()也是不行的。
也可以在当前线程中构造让别的线程处理的Handler. HandlerThread 是专门设计用来处理handle的一个线程类。
例如,WifiService.java中:
HandlerThread wifiThread = new HandlerThread("WifiService"); wifiThread.start(); mWifiHandler = new WifiHandler(wifiThread.getLooper());
例子
//YdnHandler import android.os.*; import android.content.Context; import android.os.ServiceManager; import android.net.*; import android.os.storage.IMountService; public class YdnHandler { public static void main(String args[]) { YdnThread jthread = new YdnThread(); jthread.start(); //YdnThread2 jthread2 = new YdnThread2(); //如果这个线程里面有Looper.prepare() Looper.loop()也是不行的。 //jthread2.start(); System.out.println("YdnHandler!!!!!!!!!"); try { Thread.sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Handler handle = jthread.get_handle(); System.out.println("1"); int i = 0; while(true) { i += 2; System.out.println(" " + i ); Message msg = handle.obtainMessage(); msg.arg1 = i; msg.arg2 = i+1; msg.sendToTarget(); try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(i>100) { System.exit(0); } } } } class YdnThread extends Thread { private Handler m_handle; public Handler get_handle() { return m_handle; } public void run() { System.out.println("222"); Looper.prepare(); m_handle = new Handler() { public void handleMessage(Message msg) { System.out.println("handleMessage"); } }; System.out.println("333"); Looper.loop(); } } class YdnThread2 extends Thread { public void run() { Looper.prepare(); Looper.loop(); System.exit(0); } }