glide

Java多线程看这一篇就足够了(吐血超详细总结)

故事扮演 提交于 2021-01-13 18:48:06
进程与线程 进程是程序的一次动态执行过程,它需要经历从代码加载,代码执行到执行完毕的一个完整的过程,这个过程也是进程本身从产生,发展到最终消亡的过程。多进程操作系统能同时达运行多个进程(程序),由于 CPU 具备分时机制,所以每个进程都能循环获得自己的CPU 时间片。由于 CPU 执行速度非常快,使得所有程序好像是在同时运行一样。 多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。线程是比进程更小的执行单位,线程是进程的基础之上进行进一步的划分。所谓多线程是指一个进程在执行过程中可以产生多个更小的程序单元,这些更小的单元称为线程,这些线程可以同时存在,同时运行,一个进程可能包含多个同时执行的线程。进程与线程的区别如图所示: Java中线程实现的方式 在 Java 中实现多线程有两种手段,一种是继承 Thread 类,另一种就是实现 Runnable 接口。下面我们就分别来介绍这两种方式的使用。 实现 Runnable 接口 1 package ljz; 2 class MyThread implements Runnable{ // 实现Runnable接口,作为线程的实现类 3 private String name ; // 表示线程的名称 4 public MyThread(String name){ 5 this .name = name ;

图片加载框架Glide

强颜欢笑 提交于 2021-01-13 11:45:18
为什么要用Glide 链式调用,兼容系统控件imageView,使用非常简单。不必像Fresco那样得用SimpleDrawableView Glide . with ( this ) . load ( data . teacher_image ) . placeholder ( R . drawable . recommend_teacher_icon ) . error ( R . drawable . recommend_teacher_icon ) . apply ( RequestOptions . circleCropTransform ( ) ) . diskCacheStrategy ( DiskCacheStrategy . ALL ) . into ( ivTIcon ) 可以感知activity和fragment的生命周期做图片加载的控制。 实现原理:通过 Glide.with(this)函数,传入当前的context对象。进行相应的判断转化,拿到当前fragmentManager。然后RequestManagerRetriever创建出来一个没有布局的fragment,并且把RequestManager和ActivityFragmentLifecycle相关联,实现生命周期的监控和图片网络请求的处理,防止内存泄露。

老大爷都能看懂的RecyclerView动画原理

孤人 提交于 2020-12-30 21:05:55
如何阅读本篇文章 本文主要讲解RecyclerView Layout变化触发动画执行的原理。前半部分偏重原理和代码的讲解,后半部分通过图文结合场景讲解各个阶段的执行过程。 建议先粗略阅读前半部分的原理和代码篇,做到心中有概念,带着理论知识去阅读后半部分的场景篇。最后结合全文学到的知识,带着问题去阅读源码,效果会更好。 原理篇 1. Adapter的notify方法 用过RecyclerView的同学大概都应该知道Adapter有几个notify相关的方法,它们分别是: notifyDataSetChanged() notifyItemChanged(int) notifyItemInserted(int) notifyItemRemoved(int) notifyItemRangeChanged(int, int) notifyItemRangeInserted(int, int) notifyItemRangeRemoved(int, int) notifyItemMoved(int, int) 稍微有点开发经验的同学都知道,notifyDataSetChanged()方法比其它的几个方法更重量级一点,它会导致整个列表刷新,其它几个方法则不会。有更多开发经验的同学可能还知道notifyDataSetChanged()方法不会触发RecyclerView的动画机制

android 使用图片轮播图---banner 使用

不羁岁月 提交于 2020-12-28 10:16:09
转自:https://github.com/youth5201314/banner 使用步骤 Step 1.依赖banner Gradle dependencies{ compile ' com.youth.banner:banner:1.4.10 ' // 最新版本2018-10-19写的 } Step 2.添加权限到你的 AndroidManifest.xml <!--网络上加载图片 --> <uses-permission android:name= " android.permission.INTERNET " /> <!-- 从网络或者文件上加载图片 --> <uses-permission android:name= " android.permission.READ_EXTERNAL_STORAGE " /> Step 3.在布局文件中添加Banner,可以设置自定义属性 !!!此步骤可以省略,直接在Activity或者Fragment中new Banner(); < com.youth.banner.Banner xmlns:app = " http://schemas.android.com/apk/res-auto " android:id = " @+id/banner " android:layout_width = " match_parent "

2020结束前撸一个android无限循环的banner(轮播)

拈花ヽ惹草 提交于 2020-12-28 09:42:36
最近在复习自定义view的知识,结合做了一段时间的ios体会,总结出: banner的开源库已经有很多,但在实现UI或产品的需求时总是找不到合适的,不是功能实现不了,而是能改造成产品需要的交互效果有时真是很蛋疼。所以就本着全是自己来实现的原则,参考一些资料来撸一个自定义banner,整下来也就300多行代码。 原理大概是这样: 1、自定义一个viewgroup,因为它可以用来添加其它view。 这里我只会用到3个itemview,左、中、右,根据滑动后对数据重新设置可以实现多个数据的循环切换。 这里图片的数据写死了,哎,需要动态设置的话可以自行处理一下,添加一个public方法,从itemViews可以拿到你需要设置的view。 还有,图片的显示这里直接显示在imageview上了,如果有大图的话建议还是用一些库来显示,例如glide。 public class BannerView extends ViewGroup { private Context context; private List<View> itemViews;//缓存左中右3个itemview private List<Integer> data;//资源数据,这里只用一张图片id private int itemWidth;//itemview的宽 private int itemHeight;/

Glide 网络加载图片的框架

泄露秘密 提交于 2020-12-12 04:53:11
添加依赖: implementation 'com.github.bumptech.glide:glide:3.7.0' 使用方法: Glide.with(context) .load(show_url) // 需要加载的图片url // .crossFade() // 过渡动画 .dontAnimate() // 关闭动画 .fitCenter() // 图片与控件的适配 .diskCacheStrategy(DiskCacheStrategy.SOURCE) // 缓存策略为:原始缓存 .placeholder(R.drawable.picture_demo) // 加载过程显示的图片 .error(R.drawable.picture_demo) // 加载失败显示的图片 .listener( new RequestListener<String, GlideDrawable>() { // 设置监听器 @Override public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { // 返回错误时 return false ; } @Override public boolean onResourceReady

使用Glide重新加载图片时会闪烁,RecyclerView等控件

ⅰ亾dé卋堺 提交于 2020-12-12 02:54:58
最近开发使用Glide加载图片到RecyclerView的item中的ImageView,发现重新刷新时每个ImageView都会闪烁一下 在网上找了很多解决方案: 1.更改RecyclerView中的 DefaultItemAnimator 类中的 animateChangeImpl() 方法,去掉透明度变化 然后再将更改好的类设置给RecyclerView 发现没什么用 2.更改RecyclerView的动画时间为0 首先说明上面两种方式都是更改RecyclerView的动画,这个动画是针对整个item的,对图片单独加载没啥用,至于别人为什么可以生效,咱才疏学浅,搞不懂 3.更改Glide的加载,把跳过内存缓存的选项去掉,或设为false,以及加上不需要动画 发现也没什么用,暂时没弄懂为啥,毕竟这个dontAnimate()的源码我还没看,不知道原理和干啥用的 4.最后发现一篇文章 http://www.cocoachina.com/articles/69689 大致意思就是把设置图片的这个动作自己做,不交给Glide,就解决了闪烁问题,原因可能是Glide在设置图片上加了什么动画或者其他操作吧 来源: oschina 链接: https://my.oschina.net/u/4000302/blog/4793506

期末作业、课程设计的最优选择:Android商城开源项目

只愿长相守 提交于 2020-12-11 00:12:13
项目说明: 1.完整功能的项目. 2.代码采用基础型代码,比较适合在校大学生风格,没有晦涩、难懂的编程风格. 3. 有数据库. 项目简介: 购物(商城)类app,项目主要分为主页、热卖、分类、购物车、我的五大板块. 该app基本上覆盖市面上商机级商城类app的功能,包括购物车、微信及支付宝支付、热门及历史搜索、登录注册、收货地址管理等. 另外,本项目持续维护中!!!同时可进入微信群,和作者、其他小伙伴一起谈论该项目. 截止目前项目提交记录: 对应的群进行交流学习: 使用的开源技术(蓝色字体含链接): 1. 轮播图 2. 下拉刷新、加载更多 3.Gson解析 4. butterknife 5. 批量处理权限 6. 自定义样式的dialog 7. 三级联动 8. eventBus 9. 沉浸式状态栏 10. greendao 11.ShareSDK 12. okhttpUtils 13. baseAdapter 14. Glide 15. pingpp 16.百度地图定位及Mob天气查询 基本封装与自定义: 1.ToolBar的封装 2.FragmentTabHost的自定义 3.一键清除的EditText 4.购物车的加减控件 5.短信验证倒计时的定时器 6.Glide的封装 7.购物车本地缓存 8.对称加密DESUtil 9.读取Json文件的工具类GetJsonDataUtil

Glide加载Gif的卡顿优化思路分析

耗尽温柔 提交于 2020-12-04 13:33:04
前言 Glide图片框架是可以直接加载GIF图的,但是做一个银行合作项目的时候,由于有需要出货页面需要加载一个GIF图,但是发现在使用Glide框架加载Gif图片,明显发现有延迟. 经过查看glide加载Gif图片的源码得知:Glide在加载Gif的图片帧的时候,上一帧的渲染以及下一帧的准备是串行的,这个过程中,如果出现下一帧的准备阶段时间超过了Gif间隔播放的时长,就会造成 播放卡顿 .而且此过程中,StandardGifDecoder只保留上一帧的数据,每次获取当前需要绘制的帧的时候都会从BitmapPool中获取新的Bitmap(注意,这是一个新的Bitmap对象),因此加载Gif过程中,Glide至少需要两个Bitmap.这也就导致 内存会消耗的过高 . 下面就来研究一下Glide是如何加载Gif,以及如何进行卡顿的优化了: Glide加载Gif原理初探 本文围绕以下关键字来介绍 Glide StreamGifDecoder ByteBufferGifDecoder StandardGifDecoder GifDrawable 1)首先来介绍一下Gif相关的解码器 Glide的构造中可以找到Gif的相关信息. Glide ( @NonNull Context context , /*.....*/ ) { //... List < ImageHeaderParser >

Android自定义顶部栏及侧滑菜单和fragment+viewpag滑动切换的实现

橙三吉。 提交于 2020-11-24 06:24:58
嘿嘿嘿,关于android滑动的操作,是不是经常都会用到呢。 我肯定也要学习一下啦。 https://blog.csdn.net/u013184970/article/details/82882107 https://blog.csdn.net/qq_35820350/article/details/82460376 在网上学习了一下,这两篇文章写的不错。 来看一下效果 共有4各部分 1.自定义顶部栏 2.侧滑菜单 3.弹出菜单 4.标签滑动切换 进入具体实现环节啦 先引入v4包和图片加载包 compile 'com.android.support:design:26.1.0' // 图片加载 implementation 'com.github.bumptech.glide:glide:4.2.0' 第一 、自定义顶部栏 1.先要将主题设置为NoActionBar 2.屁颠屁颠去写布局咯 三部分构成:左边按钮,中间标题,右边按钮 res/layout/layout_top_title.xml < RelativeLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:layout_width ="match_parent" android:layout_height ="50dp"