当前位置: 代码迷 >> Android >> Android图片异步加载1之传统的handler+runnable模式
  详细解决方案

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

热度:84   发布时间:2016-05-01 19:09:34.0
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;    	}    			@Override		public 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();			}		}    }}

?

  相关解决方案