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);
    }
}