package com.example.ipcplayer.thread;
import java.io.IOException;
import java.net.URL;
import com.example.ipcplayer.R;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.util.Log;
import android.widget.ImageView;
/**
* Handler+Thread+Message模式
这种模式使用了线程,所以可以看到异步加载的效果。
* 这时候我们可以看到实现了异步加载, 界面打开时,五个ImageView都是没有图的,然后在各自线程下载完后才把图自动更新上去。
*
*/
public class Main2Activity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
loadImage2("http://www.baidu.com/img/baidu_logo.gif", R.id.imageview1);
loadImage2("http://www.chinatelecom.com.cn/images/logo_new.gif",
R.id.imageview2);
loadImage2("http://cache.soso.com/30d/img/web/logo.gif", R.id.imageview3);
loadImage2("http://csdnimg.cn/www/images/csdnindex_logo.gif",
R.id.imageview4);
loadImage2("http://images.cnblogs.com/logo_small.gif",
R.id.imageview5);
}
final Handler handler2 = new Handler() {
@Override
public void handleMessage(Message msg) {
((ImageView) Main2Activity.this.findViewById(msg.arg1))
.setImageDrawable((Drawable) msg.obj);
}
};
// 采用handler+Thread模式实现多线程异步加载
private void loadImage2(final String url, final int id) {
Thread thread = new Thread() {
@Override
public void run() {
Drawable drawable = null;
try {
drawable = Drawable.createFromStream(
new URL(url).openStream(), "image.png");
} catch (IOException e) {
Log.d("test", e.getMessage());
}
// 模拟网络延时
SystemClock.sleep(2000);
Message message = handler2.obtainMessage();
message.arg1 = id;
message.obj = drawable;
handler2.sendMessage(message);
}
};
thread.start();
thread = null;
}
}