首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android图片异步加载1之传统的handler+runnable模式

2012-08-03 
Android图片异步加载一之传统的handler+runnable模式Handler与UI线程是运行在同一线程中的,因为在handler

Android图片异步加载一之传统的handler+runnable模式

Handler与UI线程是运行在同一线程中的,因为在handler的post(Runnable runnable)方法中,是将Runnable对象放入主线程的消息队列中的(封装成消息对象),该消息队列由Looper管理,然后当handler处理该消息时,会调用Runnable对象的run方法,故使用此方式不能完成图片的异步加载,主界面会等待全部图片加载完成再显示,故此方式会阻塞UI线程

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    ><TextView      android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:text="图片开始位置"    />    <ImageView     android:id="@+id/img1"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    />    <ImageView     android:id="@+id/img2"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    />    <ImageView     android:id="@+id/img3"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    />    <TextView      android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:text="图片结束位置"    /></LinearLayout>

?Activity代码:

public class SyncLoadImgTestActivity extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        handler.post(new DownloadThread("http://www.baidu.com/img/baidu_logo.gif",R.id.img1));        handler.post(new DownloadThread("http://img3.cache.netease.com/www/logo/logo_png.png",R.id.img2));        handler.post(new DownloadThread("http://www.iteye.com/images/logo.gif?1308833136",R.id.img3));    }        private Handler handler = new Handler();        class DownloadThread implements Runnable {    private String urlStr;    private int id;        public DownloadThread() {        }        public DownloadThread(String urlStr,int id) {    this.urlStr = urlStr;    this.id = id;    }    @Overridepublic void run() {downloadImg(urlStr,id);}private void downloadImg(String urlStr, int id) { try {URL url = new URL(urlStr);InputStream is = url.openStream();Drawable drawable = Drawable.createFromStream(is, "img");ImageView imgview = (ImageView) SyncLoadImgTestActivity.this.findViewById(id);imgview.setImageDrawable(drawable);Thread.currentThread().sleep(1000);} catch (Exception e) {e.printStackTrace();}}    }}

?

热点排行
Bad Request.