首页 > 代码库 > Android异步载入全解析之开篇瞎扯淡
Android异步载入全解析之开篇瞎扯淡
Android异步载入
概述
Android异步载入在Android中使用的很广泛,除了是由于避免在主线程中做网络操作。更是为了避免在显示时由于时间太长而造成ANR,添加显示的流畅性,特别是像ListView、GridView这种控件。假设getView的时间太长,就会造成很严重的卡顿,很影响性能。
本系列将展示在Android中怎样进行异步载入操作,并使用ListView来作为演示的对象。
怎样下载图像
下载自然是须要使用网络,使用网络就不能在主线程。在主线程就会爆炸。所以我们必须要在非主线程中去下载图像。OK。那么下载使用的方法呢。许多,这里简单的列举几种
HttpURLConnection
private static Bitmap getBitmapFromUrl(String urlString) { Bitmap bitmap; InputStream is = null; try { URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); is = new BufferedInputStream(conn.getInputStream()); bitmap = BitmapFactory.decodeStream(is); conn.disconnect(); return bitmap; } catch (Exception e) { e.printStackTrace(); } finally { try { if (is != null) is.close(); } catch (IOException e) { } } return null; }
很easy。甚至都没做超时等处理。这里偷个懒。
Drawable
Drawable d = Drawable.createFromStream(is, "url");
也很easy,仅仅是须要进行下转换。
ListView
这一篇作为开篇。我们还是来扯下淡,这个ListView,大家都用过,最经常使用的优化也就是使用ViewHolder模式进行复用,避免反复的inflate和findViewById而影响效率,相信大部分的开发人员都已经熟知,这里我们还是贴下Adapter的代码:
package com.imooc.listviewacyncloader; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import java.util.List; public class MyAdapterNotUseCaches extends BaseAdapter { private LayoutInflater mInflater; private List<String> mData; public MyAdapterNotUseCaches(Context context, List<String> data) { this.mData = http://www.mamicode.com/data;>
确实很easy哈。最主要的ViewHolder模式使用ListView。只是,这里有点须要注意的:
viewHolder.imageView.setTag(url);
这个事实上是很重要的,为什么重要我们后面会继续说。
除了这个地方,其他的部分,假设你能独立写出来。相信你已经击败了10%的开发人员了,后面我们再来讲怎样击败剩下90%的开发人员。
图像
图像我们能够从网络相冊里面来获取,这里偶然找到郭神的一篇博客里面的图像地址,就无耻的拿来用了:
public class Images { public final static String[] IMAGE_URLS = new String[] { "http://img.my.csdn.net/uploads/201407/26/1406383299_1976.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383291_6518.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383291_8239.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383290_9329.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383290_1042.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383275_3977.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383265_8550.jpg",……
那么我们在MainActivity中就能够导入这些图像了:
package com.imooc.listviewacyncloader; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; import java.util.Arrays; import java.util.List; public class MainActivity extends Activity { private ListView mListView; private List<String> mData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView) findViewById(R.id.lv); mData = http://www.mamicode.com/Arrays.asList(Images.IMAGE_URLS);>
測试图像搞定~我们后面继续~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我的Github
我的视频 慕课网
Android异步载入全解析之开篇瞎扯淡
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。