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对象。
