图片查看器(handler)

public class MainActivity extends Activity {

   Handler handler = new Handler() {

      public void handleMessage(Message msg) {

         switch (msg.what) {

           case 1:    

            ImageView iv = (ImageView) findViewById(R.id.image);    

            // 设置一个位图的方法  

            iv.setImageBitmap((Bitmap) msg.obj);   

            break;

           case 2:     

          Toast.makeText(MainActivity.this, "请求超时", 1).show();  

            break;

       }

      };  

  };

  @Override

   protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);

   }

  public void on(View view) {

    Thread t = new Thread() {  

       public void run() {

           String path = "http://192.168.1.10:8080/Image/meinv1.jpg";

              try {

                  // 获取网络地址    

               URL url = new URL(path);

                  // 创建链接     

               HttpURLConnection conn = (HttpURLConnection) url.openConnection();    

               // 设置请求方式     

              conn.setRequestMethod("GET");    

               // 设置链接超时     

              conn.setConnectTimeout(8000);

                 // 设置读取超时  

               conn.setReadTimeout(8000);  

               // 提交请求     

             conn.connect();     

             // 判断请求码   

         if (conn.getResponseCode() == 200) {  

               // 获取服务器传来流    

              InputStream in = conn.getInputStream();   

               // 把图片封装在bitemap里     

             Bitmap bitmap = BitmapFactory.decodeStream(in);    

              // 创建一个消息对象   

              Message msg = new Message();     

              // 要在消息处理器里使用的变量     

             msg.obj = bitmap;      

             // 消息的状态   

             msg.what = 1;

               // 发送消息     

           handler.sendMessage(msg);

         } else {    

           // 发送空消息,不过要传一个消息状态给他    

          handler.sendEmptyMessage(2);   

       }

      } catch (Exception e) {     

     // TODO Auto-generated catch block      

    e.printStackTrace();  

     }

     };

  };  

 t.start();  

}

 

消息处理原理

  在子线程里发送的消息会被放进MessageQueue(消息集合)这样Loper在(轮巡器)遍历messgeQueue的时候,发现有新的messge(消息)立马会将这条新的消息交给handler(消息处理器)处理,handler对不同的消息做不同的处理

    //如果消息池中有消息,那么返回第一条消息,否则new一条消息返回

  handler.obtainMessage(2);

  

posted @ 2015-12-15 09:22  随笔、  阅读(154)  评论(1编辑  收藏  举报