TextView text; public static final int UPDATE_TEXT = 1; private Handler handle = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case UPDATE_TEXT: text.setText((String)msg.obj); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { text = (TextView)findViewById(R.id.textView3); Button button13 = (Button)findViewById(R.id.button13); button13.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; BufferedReader reader = null; try{ URL url = new URL("http://www.chicai.group"); connection = (HttpURLConnection)url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(8000); connection.setReadTimeout(8000); connection.connect(); int responseCode = connection.getResponseCode(); if(responseCode != HttpURLConnection.HTTP_OK) return; InputStream in = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(in)); String line; StringBuilder response = new StringBuilder(); while((line = reader.readLine()) != null ) { response.append(line); } //这里用Handle通知主线程修改UI Message m = new Message(); m.what = UPDATE_TEXT; m.obj = response.toString(); handle.sendMessage(m); } catch (Exception e) { e.printStackTrace(); } finally { if(reader != null) { try{ reader.close(); }catch (IOException e) { e.printStackTrace(); } } if(connection != null) connection.disconnect(); } } }).start(); } }); }
异步消息处理机制you4个部分组成:Message、Handler、MessageQueue和Looper。
Message是线程之间传递的消息,他可以在内部携带少量的信息,用于不同线程之间交换数据。使用what字段表示什么、arg1和arg2传递整形数值、obj传递一个对象。
Handler为处理者,主要用来发送和处理消息。发送消息一般是使用Handler的sendMessage()方法,发出的消息经过一系列辗转处理后,最终会传递到Handler的handleMessage()方法。
MessageQueue是消息队列的意思,他用来存放Handler发送的消息,这部分消息会一直存放在消息队列中,等待被处理。每个线程中只会有一个MessageQueue对象。
Looper是每个线程中MessageQueue的管家,调用Looper的loop()方法后,就会进入到一个无限循环当中,然后每当发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的handleMessage()方法中。每个线程中也只会有一个Looper对象。