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