为了账号安全,请及时绑定邮箱和手机立即绑定
  • /** * 由于构造方法为private,因此外界只能通过类名.方法名获得实例 * @return * @param i * @param lifo */ public static ImageLoader getInstance(int i, Type lifo){ //两重判断:为了提高效率 if (mInstance == null){ //先判断是否为空,若是空,则需要创建实例,否 则不需要创建实例,此层过滤到了大部分的代码 synchronized (ImageLoader.class){ /*因为上步未做同步处理,所以有可能有多个线程进入此步,这时做同步处理,(当然此时需要同步处理的线程就比较少了,提高了效率)线程就只能一个一个往下*/ if (mInstance == null){ /*排队进来的线程需要再次判断mInstance是否为空,比如:synchronized之前进来了两个线程A和B,A先执行if (mInstance == null)判断,且创建了一个实例, 然后B再接着判断if (mInstance == null)时,就不需要再次创建实例了*/ mInstance = new ImageLoader(DEFAULT_THREAD_COUNT, Type.LIFO); } } } return mInstance; }
    查看全部
    0 采集 收起 来源:单例模式

    2016-11-04

  • 图片加载流程: 在gridItem的getView中来进行图片的查找 getView() { url --> Bitmap //根据url来加载Bitmap url --> LruCache查找 //首先,根据url到LruCache中查找 --> 找到直接返回 --> 找不到的话,根据url -> 创建一个Task -> 将Task加入到TaskQueue 且发送一个通知去提醒后台轮询线程 -> 后台轮询线程从TaskQueue中提取任务Task -> 将Task发到线程池中去执行->执行的内容如下: Task -- > run(){根据url加载图片: 1、获得图片显示的大小 2、使用Options对图片进行压缩 3、加载图片且放入LruCache } } 后台轮询线程的实现: 不是通过新启一个线程来不断的循环,因为这样效率很低。 new Thread(){ run(){ while(true){ } } }.start(); 我们是通过Handler + Looper + Message来实现
    查看全部
  • lrucache
    查看全部
  • option,处理图片,
    查看全部
  • 加载图图片需要达到的要求
    查看全部
  • 选择图片需要对图片进行压缩,避免内存溢出
    查看全部
  • popwindow布局
    查看全部
  • lurcache初始化
    查看全部
  • imagerLoader的成员变量
    查看全部
  • 2.1 单例模式两重判断,防止两个线程同时创建对象
    查看全部

举报

0/150
提交
取消
课程须知
1.掌握Java基础 2.熟练掌握Android常用技术
老师告诉你能学到什么?
1.单例模式在项目中的实践 2.图片的缓存与压缩 3.线程轮询与并行 4.反射机制在Android中的使用 5.Handler-线程间通信

微信扫码,参与3人拼团

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

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