Android异步载入全解析之开篇瞎扯淡
Android异步载入
概述
怎样下载图像
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
- 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 = data;
- mInflater = LayoutInflater.from(context);
- }
- @Override
- public int getCount() {
- return mData.size();
- }
- @Override
- public Object getItem(int position) {
- return mData.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- String url = mData.get(position);
- ViewHolder viewHolder = null;
- if (convertView == null) {
- viewHolder = new ViewHolder();
- convertView = mInflater.inflate(R.layout.listview_item, null);
- viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv_lv_item);
- convertView.setTag(viewHolder);
- } else {
- viewHolder = (ViewHolder) convertView.getTag();
- }
- viewHolder.imageView.setTag(url);
- viewHolder.imageView.setImageResource(R.drawable.ic_launcher);
- return convertView;
- }
- public class ViewHolder{
- public ImageView imageView;
- }
- }
确实很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",
……
- 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 = Arrays.asList(Images.IMAGE_URLS);
- mListView.setAdapter(……);
- }
- }
測试图像搞定~我们后面继续~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我的Github 我的视频 慕课网
Android异步载入全解析之开篇瞎扯淡的更多相关文章
- Android异步载入全解析之使用多线程
异步载入之使用多线程 初次尝试 异步.异步,事实上说白了就是多任务处理.也就是多线程执行.多线程那就会有各种问题,我们一步步来看.首先.我们创建一个class--ImageLoaderWithoutC ...
- Android异步载入全解析之IntentService
Android异步载入全解析之IntentService 搞什么IntentService 前面我们说了那么多,异步处理都使用钦定的AsyncTask.再不济也使用的Thread,那么这个Intent ...
- Android异步载入全解析之大图处理
Android异步载入全解析之大图处理 异步载入中很重要的一部分就是对图像的处理,这也是我们前面用异步载入图像做示例的原因. 一方面是由于图像处理不好的话会很占内存,并且easyOOM,还有一方面,图 ...
- Android异步载入全解析之使用AsyncTask
Android异步载入全解析之使用AsyncTask 概述 既然前面提到了多线程,就不得不提到线程池,通过线程池,不仅能够对并发线程进行管理.更能够提高他们运行的效率.优化整个App.当然我们能够自己 ...
- Android异步载入AsyncTask具体解释
曾看见有人说过.认为非常有道理.分享一下: 技术分为术和道两种: (1)具体做事的方法是术. (2)做事的原理和原则是道. 近期项目发现个重大问题.结果打log跟踪查是AsyncTask导 ...
- Android 异步消息处理机制解析
Android 中的异步消息处理主要由四个部分组成,Message.Handler.MessageQueue.Looper.下面将会对这四个部分进行一下简要的介绍. 1. Message: Messa ...
- Android系统启动过程全解析
Android系统是一款基于Linux的移动操作系统,那么Android是如何启动起来的呢?本文就详细阐述Android系统的启动过程. 从内核之上,我们首先应该从文件系统的init开始,因为 ini ...
- Android异步载入学习笔记之四:利用缓存优化网络载入图片及ListView载入优化
假设不做不论什么处理.直接用网络载入图片在网速快的情况下可能没什么不好的感觉.可是假设使用移动流量或是网络不好的时候.问题就来了,要么用户会抱怨流量使用太多.要么抱怨图片载入太慢.如论从哪个角度出发, ...
- Eclipse,到了说再见的时候了——Android Studio最全解析
转自:http://blog.jobbole.com/77635/ 去年的Google大会上,Google带给我们一个小玩具——Android Studio,说它是玩具,是因为它确实比较菜,界面过时, ...
随机推荐
- thread.h
https://github.com/wookayin/pintos/blob/master/src/threads/thread.h #ifndef THREADS_THREAD_H #defi ...
- mysql插入数据出现java.lang.NullPointerException
在写购物车持久层的时候,要进行测试的时候居然出现了空指针异常: 最后发现是测试类少了 @RunWith(SpringRunner.class)@SpringBootTest 如下是没改之前的测试类: ...
- VC++ 借助 Win32 API 绘图实现基本的细胞自动机演示
//本程序使用 Visual Studio 2015 生成的 Win32 窗口程序模板 开发//使用 Win32 API 绘图//实现基本的细胞自动机演示////目前已知问题://存在内存泄漏,但具体 ...
- 【jQuery01】添加添加div
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 题解 洛谷 P1580 【yyy loves Easter_Egg I】
一言不合上代码: #include<cstdio> #include<cstring> ],bz[],dmz[]; int maohao,xf,ls,sss,lll,xxf,x ...
- 为什么不能往Android的Application对象里存储数据
在一个App里面总有一些数据需要在多个地方用到.这些数据可能是一个 session token,一次费时计算的结果等.通常为了避免activity之间传递对象的开销 ,这些数据一般都会保存到持久化存储 ...
- OC中的@的作用研究
OC中的@字符用的频率很的高,其主要作用是为了差别于其它语言的keyword和语法 以下我们来研究一下其应用 1.声明类,协议,延展,权限,属性等 @interface声明类 @protocol声明协 ...
- C++字节对齐与结构体大小计算
转载注明出处:http://pppboy.blog.163.com/blog/static/30203796201082494026399/ 感谢原创博主的辛勤成果. 说明: 结构体的sizeof值, ...
- idea报错。Error:Failed to load project configuration: cannot parse xml file E:\project\.idea\workspace.xml: Error on line 1: 前言中不允许有内容。
因为电脑卡死强制重启电脑后打开idea,进行junit单元测试报错: idea报错.Error:Failed to load project configuration: cannot parse x ...
- mysql语句判断一天操作记录的个数
话说有一文章表article,存储文章的添加文章的时间是add_time字段,该字段为int(5)类型的,现需要查询今天添加的文章总数并且按照时间从大到小排序,则查询语句如下: 1 select ...