为了账号安全,请及时绑定邮箱和手机立即绑定

Android必学-异步加载

难度中级
时长 1小时57分
学习人数
综合评分9.70
220人评价 查看评价
9.9 内容实用
9.7 简洁易懂
9.5 逻辑清晰
  • 1. 对于从网络上获取图片这种需求,我们都要使用Cache来将我们的图片缓存起来,尤其是对于ListVIew这种,不能每次我们滑动ListView就重新从网上下载图片,这样会很浪费资源而且浪费手机的流量。在Android中,已经为我们提供了一个用于缓存的类LruCache。我们可以使用这个类来实现我们对于图片资源的缓存。 2. LruCache是将图片缓存在内存中,而还有个第三方的类DiskLruCache来将图片缓存到手机的Disk上,而我们大型的app,一般都是将LruCache和DiskLruCache结合起来使用,形成一个memory hierarchy。
    查看全部
    0 采集 收起 来源:LruCache缓存(上)

    2016-07-06

  • 什么是异步加载:就是用异步的方式去加载数据 使用异步加载的原因 1.android是单线程模型 2.耗时操作都必须放在单独的线程中去做,而不能去阻塞UI线程 异步加载最常用的两种方式 1.多线程\线程池 2.AsyncTask(底层也是基于线程池来实现的)
    查看全部
  • 刷新混乱的问题问题是由于快速滚动时,同一个位置的item可能被设置了多次图片显示。 而由于线程是异步的,导致后面会有多个线程在跑。 第一次测试的线程还没有跑完,第二次的线程又开始了。 所以同一个位置会被设置多次图片。 设置了tag之后,之后一次设置的tag会和item绑定。 所以第一次的线程跑完设置图片的时候,tag已经更新为新的url了,所以本次设置图片就放弃了。
    查看全部
    0 采集 收起 来源:使用Thread

    2016-07-04

  • 在异步加载中,当网络环境不是很好情况下,ListView本身的缓冲机制可能会造成ListView的item显示错乱。 两种方法可以避免这种问题: 1. 将当前的item与原始数据绑定 例如上一笔记中,在Adapter的getView()方法中为每个ImageView设置一个url的tag String urlString = newsBean.imageUrl; viewHolder.imageView.setTag(urlString); 在主线程的Handler中真正加载进行更新UI时,会判断这个tag是否是对应的。只有当tag是正确时才会真正做设置item的操作 if(mImageView.getTag().equals(urlString)) mImageView.setImageBitmap((Bitmap) msg.obj); 2. 使用成员变量将对应的数据进行缓存,这种方式就相当于BaseAdapter中使用ViewHolder是一样的。
    查看全部
    0 采集 收起 来源:使用Thread

    2016-07-04

  • Bitmap-刷新ListView加载: 问题是解决:缓存的图片对正确的图片加载时的影响~ 问题描述:图片在刷新显示的时候会刷新更改多次,并不是一次到位加载正确图片。 问题分析:ListView会重用convertView,每一个ImageView并没有唯一的标识,多个LIstView中Item的加载在缓冲池中产生多个ImageView,在没有Tag的情况下,重用convertView就会导致新的图片在加载之前先显示旧的图片,根本原因是ListView中特定的Item没有显示正确的URL资源 解决方案:方法1-设置Tag:在首次加载时就为ImageView的标签,标签为正确的URL(身份验证信息):viewHolder.imageView.setTag(url),在handler中加载图片时对标签进行判断,若符合,则加载。 方法2-设置成员变量:在showImageByThread中仿照ImageView的方式对URL进行缓存,避免了网络下载时间不确定导致的持续性的混乱
    查看全部
    0 采集 收起 来源:使用Thread

    2016-07-04

  • 抽象类 URLConnection 是所有表示应用程序与 URL 之间通信链路的类的超类。该类的实例可以用来对由 URL 引用的资源进行读取和写入操作,HttpURLConnection是支持 HTTP 特定功能的 URLConnection
    查看全部
  • inputStream in = new BufferedinputStream(conn.getInputStream()); inputStream是个抽象类,通过实例化子类获取BufferedinputStream的对象。
    查看全部
  • 加载图片的两种方式:多线程;异步加载
    查看全部
  • 异步加载的第一层:通过AsyncTask访问网络,获取json或者XML字符串,然后解析他们产生若干object,将每个object放入到ListVIew中(adapter需要使用view holder pattern去写),AsyncTask中的访问网络获取json或者XML字符串,并且产生若干个object的工作就是在doInBackground()方法中进行的,所以这个方法总的来说就是用来准备数据源的。
    查看全部
    0 采集 收起 来源:逻辑梳理

    2016-07-03

  • 异步加载——实现ListView图文混排逻辑总结 第一步 onCreate中new一个NewsAsyncTask 将url传递给getJsonData 实现异步访问 第二步 getJsonData将url转换为NewsBean对象 第三步 onPostExecute讲NewsBean的数据传递给NewsAdapter 第四步 NewsAdapter构造一个ListView数据源 并将数据源设置给ListView
    查看全部
    0 采集 收起 来源:逻辑梳理

    2016-07-03

  • 本节课目标:文艺方式重现BaseAdpter 1、自定义Adpter继承BaseAdpter; 2、定义变量:List<NewsBean>;LayoutInflater; 3、重写构造函数NewsAdpter(Context context, List<NewsBean> data)。 4、文艺方式重写getView()方法。 4.1、自定义类ViewHolder,映射相关的view对象
    查看全部
  • 3. 解析json数据到List<NewsBean>中 jsonobject=new JsonObject(jsonString); jsonArray=jsonobject.getjsonArray("data"); NewsBean newsBean; (如图),通过如下for循环就可以将jsonString原始字符数据导入到每个NewsBean对象中。 for (int i = 0; i<jsonArray.length(); i++) { jsonObject = jsonArray.getJSONObject(i); newsBean = new NewsBean(); //从jsonObject中得到每个元素数据给newsBean newsBean.image = jsonObject.getString("picSmall"); newsBean.title = jsonObject.getString("name"); newsBean.content = jsonObject.getString("description"); newsBeanList.add(newsBean); } 最后通过newsBeanList.add(newsBean)组成一个List<NewsBean>对象,这是构成Adapter适配器的原始数据。
    查看全部
  • 异步加载 1. 主线程中不能做耗时操作,只能更新UI 下面的例子 2. 获取jsonData url = http://www.imooc.com/api/teacher?type=4&num=30 下面的openStream参数是从URL参数中new URL(url).openStream()获取的。 private String readStream(InputStream openStream) { InputStreamReader isr; String result = ""; try { String line = ""; //将InputStream类的字节流转换成字符流 isr = new InputStreamReader(openStream, "utf-8"); //转存在BufferedReader中 BufferedReader br = new BufferedReader(isr); while((line = br.readLine())!=null) { result+=line; } } return result; }
    查看全部
  • Message messages= new Message(); Message message=Message.obtain(); message.obj=bitmap; 一个始终创建新的对象、一个是只创建一个、一个用完返回一个新的对象、比较节省内存
    查看全部
    0 采集 收起 来源:使用Thread

    2016-07-03

  • 一、如何通过Url获取网络反馈的Json字符串结果: 1、重写doInBackground(Params…) 获取请求的网址,调用自定义方法getJson(String url); 2、自定义方法getJson中定义URL,获取inputStream流 3、自定义方法readStream(InputStream is),将inputStream流中的字节流拼装成字符串; 4、自定义方法getJson调用readeStream()方法,并将InputStream流作为参数传递。这样既可获得json串结果。
    查看全部
    0 采集 收起 来源:获取Json数据

    2016-07-02

举报

0/150
提交
取消
课程须知
1、了解异步处理的一般方法 2、掌握如何使用多线程进行异步加载 3、掌握如何使用ASyncTask进行异步加载 4、异步加载的缓存与优化
老师告诉你能学到什么?
本课程是Android中级课程 1、熟练掌握基本的Android应用程序开发方法

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!