kotlin
文章平均质量分 79
zhangphil
-
Kotlin/Java HashMap异常:java.util.ConcurrentModificationException
Java并发多线程环境中,造成死锁的最简单的场景是:多线程中的一个线程T_A持有锁L1并且申请试图获得锁L2,而多线程中另外一个线程T_B持有锁L2并且试图申请获得锁L1。线程的锁申请操作是阻塞的,于是造成线程T_A和线程T_B无法正确获得想要的锁,两个线程被阻塞进入死锁状态。Java并发多线程环境中,造成死锁的最简单的场景是:多线程中的一个线程T_A持有锁L1并且申请试图获得锁L2,而多线程中另外一个线程T_B持有锁L2并且试图申请获得锁L1。此方法返回一个线程容量为n的线程池。读时候快,写/删/改慢。原创 2024-04-24 23:34:24 · 809 阅读 · 0 评论 -
Android Glide centerCrop/fitCenter与ImageView的scaleType相互作用,Kotlin
(三)image3,Glide配置了fitCenter(),Glide先按照fitCenter()解码装配Bitmap,然后丢给ImageView显示时候,ImageView里面android:scaleType="centerCrop",此时ImageView又做了一次centerCrop变换,最终展示的是Gldie的fitCenter -> ImageView的centerCrop样式,注意,ImageView里面的centerCrop是基于前一步Glide的fitCenter裁出来的Bitmap。原创 2024-04-22 23:52:49 · 811 阅读 · 0 评论 -
ArrayList随机shuffled,随机位置插入标签分组,Kotlin
方案一:import numpy as nparray = np.arange(0, 10, 1)print("原来数据顺序:")print(array)state = np.random.get_state()np.random.shuffle(array)np.random.set_state(state)print("打乱原顺序,新的随机数据:")print(ar..._python打乱数组顺序。Python打乱列表/数组原顺序,新列表/数组中元素随机分布_python打乱数组顺序-CSDN博客。原创 2024-04-21 23:22:13 · 308 阅读 · 0 评论 -
Android GridLayoutManager getExtraLayoutSpace RecyclerView与Glide预加载屏幕外不可见区域,Kotlin
【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。现在结合他人的代码加以修改,给出一个以原始图形中心为原点,修剪图片为头像的工具类,此类可以直接在布局文件中加载使用,比。文章浏览阅读670次。原创 2024-04-20 23:42:18 · 595 阅读 · 0 评论 -
Int整数相除,math.ceil向上取整,Kotlin
Java小数点数字和百分号数字之间的转换小数点数字和百分号(百分比)数字之间的转换在证券金融业很常见,需要经常进行两者之间相互转换。如代码: String s1 = "21.8%";Java小数点数字和百分号数字之间的转换_将浮点型转为百分比 java-CSDN博客。Kotlin浮点数Float整数Int乘*除/精度损失-CSDN博客。Kotlin toInt() +0.5 toInt() Math.round()_kotlin round-CSDN博客。原创 2024-04-19 23:18:35 · 310 阅读 · 0 评论 -
Android优化RecyclerView图片展示:Glide成堆加载批量Bitmap在RecyclerView成片绘制Canvas,Kotlin(b)
【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。现在结合他人的代码加以修改,给出一个以原始图形中心为原点,修剪图片为头像的工具类,此类可以直接在布局文件中加载使用,比。文章浏览阅读670次。原创 2024-04-19 00:01:35 · 894 阅读 · 1 评论 -
ArrayList chunked切块,Kotlin
给定长度值length,把列表切分成每段长度为length的N段列表,Kotlin_zhangphil的博客-CSDN博客。扁平的MutableList元素每隔若干元素一组装入新MutableList,Kotlin-CSDN博客。给定长度值length,把列表切分成每段长度为length的N段列表,Kotlin_zhangphil的博客-CSDN博客。扁平的MutableList元素每隔若干元素一组装入新MutableList,Kotlin_kotlin mutablelist3个一组-CSDN博客。原创 2024-04-17 23:52:36 · 960 阅读 · 0 评论 -
Android GridLayoutManager Glide批量加载Bitmap绘制Canvas画在RecyclerView,Kotlin(a)
【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。现在结合他人的代码加以修改,给出一个以原始图形中心为原点,修剪图片为头像的工具类,此类可以直接在布局文件中加载使用,比。文章浏览阅读670次。原创 2024-04-16 23:06:25 · 1132 阅读 · 0 评论 -
Android GridLayoutManager SpanSizeLookup dynamic set grid cell column count,Kotlin
Android RecyclerView的StaggeredGridLayoutManager实现交错排列的子元素分组先看实现的结果如图:设计背景:现在的产品对设计的需求越来越多样化,如附录文章2是典型的联系人分组RecyclerView,子元素排列到一个相同的组,但是有些时候,UI要求把这些元素不是垂直方向的,而是像本文开头的图中所示样式排列,这就需要用StaggeredGridLayoutMa_staggeredgridlayoutmanager。原创 2024-04-14 23:30:41 · 689 阅读 · 0 评论 -
Android Glide裁剪centerCrop到fitCenter,复用内存缓存Bitmap加工TransformationUtils.fitCenter,Kotlin
Android RoundedBitmapDrawable:Android官方的圆角图形图象实现方案RoundedBitmapDrawable是Android在support v4的扩展包中新增的实现圆角图形的关键类,借助RoundedBitmapDrawable的帮助,可以轻松的以Android标准方式实现圆角图形图象。现在结合他人的代码加以修改,给出一个以原始图形中心为原点,修剪图片为头像的工具类,此类可以直接在布局文件中加载使用,比。所实现的在Kotlin动态代码中绘制的描边效果。原创 2024-04-13 23:02:42 · 975 阅读 · 0 评论 -
Android RecyclerView性能优化及Glide流畅加载图片丢帧率低的一种8宫格实现,Kotlin
【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。现在结合他人的代码加以修改,给出一个以原始图形中心为原点,修剪图片为头像的工具类,此类可以直接在布局文件中加载使用,比。文章浏览阅读670次。原创 2024-04-12 23:03:40 · 784 阅读 · 0 评论 -
Android性能优化RecyclerView预加载LayoutManager的getExtraLayoutSpace,Kotlin
文章浏览阅读501次。文章浏览阅读428次。上面要预加载10条,每条item高度是100pix,也就是说,正确的情况下,如果RecyclerView不作任何调优,那它只加载当前屏幕可见区域position为0~21的item(每个item高度为100pix),如果配置了getExtraLayoutSpace,那么会多(Extra)加载10条position为22~31的item,其中22~31为屏幕底部不可见的区域中内容,被“预加载”出来。文章浏览阅读410次。原创 2024-04-11 23:07:22 · 1256 阅读 · 0 评论 -
Android Glide load grid RecyclerView scroll smooth, high performance and ,Kotlin
【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。现在结合他人的代码加以修改,给出一个以原始图形中心为原点,修剪图片为头像的工具类,此类可以直接在布局文件中加载使用,比。文章浏览阅读670次。原创 2024-04-10 23:22:18 · 739 阅读 · 0 评论 -
Android协程GlobalScope、lifecycleScope、CoroutineScope的launch,Kotlin
文章浏览阅读449次。coroutineScope 创建独立协程作用域,直到所有启动的协程都完成后才结束自己。则控制台没有任何输出,kotlin协程在launch时候启动一个协程,不阻塞线程,main主函数迅速运行完成,并退出,但此时在for循环启动的线程还没有运行输出就因为main主线程的退出而不可见(系统销毁)。GlobalScope.launch 创建一个顶级协程,它很轻,但运行时还是会消耗内存资源,且可以一直运行直到整个应用程序停止退出,这很可能导致内存泄露,谨慎使用 GlobalScope。原创 2024-04-07 23:26:29 · 856 阅读 · 0 评论 -
Android Glide配置AppGlideModule定制化线程池,Kotlin(1)
在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。文章浏览阅读670次。假设实现一个简单的功能,对传入要加载的path路径增加一定的筛选、容错或“重定向”,需要自定义一个模型,基于这个模型,让Glide自动匹配模型展开加载。文章浏览阅读670次。原创 2024-04-03 23:07:59 · 1087 阅读 · 0 评论 -
Android Studio的Profiler生成trace排查Android冷启动耗时,Kotlin
注意,上面的调用层次结构自上往下即是函数方法的调用链,上面的函数启动了下面的函数。此时AS下面就会自动记录、生成trace,因为只是排查冷启动阶段耗时,所以可以阶段很多时间trace即可,但至少需要大于1500ms,因为那两个耗时方法需要覆盖到。上面有两个方法耗时:mySleep500()和mySleep1000(),目标是通过Profiler的trace把这两个冷启动阶段的耗时方法找到。利用AS自带的Profiler抓取trace排查定位冷启动耗时方法,不用写代码,直接配置AS即可完成。原创 2024-04-02 23:45:59 · 1065 阅读 · 0 评论 -
Android屏幕硬件宽高和当前View显示区域的宽高,Kotlin
Android测量View宽和高的一般通用方法众所周知Android在onCreate里面如果直接对一个View进行getWidth,getHeight时候,得到到的值全部是0,这样拿不到View的宽和高的值,但有时候又必须在初始化阶段获取一个View的宽和高,现在给出一个基本的通用方法: int w = View.MeasureSpec.makeMeasureSpec(0, Vie_安卓获取view的宽高。Android测量View宽和高的一般通用方法_安卓获取view的宽高-CSDN博客。原创 2024-03-31 23:12:42 · 558 阅读 · 0 评论 -
Android ViewPager2 setOffscreenPageLimit预加载Fragment,Kotlin
2、如果设置了mOffscreenPageLimit(并且,mOffscreenPageLimit通过setOffscreenPageLimit()这个API接口也只能设置 >=1 的值),ViewPager2就退化成过去老版的ViewPager了,除了把当前可见的那个Fragment加载出来外,还会根据用户设置的mOffscreenPageLimit值,加载mOffscreenPageLimit个不可见的Fragment。日志显示,只加载了当前可见的0号Fragment,没有加载1号Fragment。原创 2024-03-28 00:44:22 · 1084 阅读 · 0 评论 -
Android RecyclerView canScrollVertically方向与返回值,Kotlin
Android RecyclerView滑动到底部/上拉/上拉见底自动加载更多实现以及点击/长按事件处理Android RecyclerView下拉加载更多有Android谷歌官方的实现,实现的方式是通过SwipeRefreshLayout把RecyclerView包裹起来,然后就可以通过SwipeRefreshLayout的回调接口实现下拉刷新功能。Android RecyclerView滑动到底部/上拉/上拉见底自动加载更多实现以及点击/长按事件处理_android 模拟上拉事件-CSDN博客。原创 2024-03-30 23:07:39 · 409 阅读 · 1 评论 -
Kotlin报错:null cannot be cast to non-null type kotlin.Int
it.todo() //函数内使用it替代object对象访问属性和方法。it.todo() //object不为null,才会执行let函数。当a不为null时,执行大括号里的语句(it肯定不为null)如果a == null ,则为 null。= null,则a.b()如果 a 不是 b,则为 null。如果a 是 b,则 a as b。当a为null时,什么都不执行。如果a==null,抛出空指针。=null时,执行a。当a==null时,执行b。kotlin常用表达式let,?原创 2024-03-26 23:26:47 · 496 阅读 · 0 评论 -
Kotlin协程CoroutineScope命名空间CoroutineName,Kotlin
文章浏览阅读323次。coroutineScope 创建独立协程作用域,直到所有启动的协程都完成后才结束自己。runBlocking 和 coroutineScope 很像,它们都需要等待内部所有相同作用域的协程结束后才会结束自己。两者主要区别是: runBlocking 阻塞当前线程,而 coroutineScope不会,coroutineScope会挂起并释放底层线程供其它协程使用。kotlin协程coroutineScope。kotlin协程coroutineScope-CSDN博客。原创 2024-03-25 23:03:01 · 617 阅读 · 0 评论 -
Kotlin的lateinit关键词
有时,并不能定义一个变量或对象值为空,而也没办法在对象或变量在定义声明时就为它赋值初始化,那么这时就需要用到Kotlin提供的延迟初始化lateinit。另外,在Android中,有些写在外层的View对象,如Button,TextView虽然可以通过?.,显得代码臃肿多余,Kotlin设计出lateinit,这样开发者又可以像写Java那样,直接 button。但Kotlin语言假定开发者在使用该lateinit变量或对象时,开发者会完成初始化赋值、保证提供非空(null)值(然而,天知道呢!原创 2024-03-24 23:03:18 · 542 阅读 · 0 评论 -
android.os.TransactionTooLargeException解决方案,Kotlin
文章浏览阅读422次。本文作者:Zhang Phil原文链接:Android Activity生命周期以及onSaveInstanceState、onRestoreInstanceState要点备忘一般的,当Android activity的生命周期进入onPause后,Android系统紧接着就要回调:protected void onSaveInstanceState_activity生命周期 onsaveinstane。两边改造,换用Binder,参考(原创 2024-03-23 23:08:16 · 1079 阅读 · 0 评论 -
Kotlin/Java ArrayList与OOM(OutOfMemoryError)
只是把list原先的每个元素置为null,而ArrayList在内存堆上分配的内存空间并未立即释放,所以,即便调用了ArrayList的clear(),并不会立即释放ArrayList在内存堆上分配的空间,clear()只是将原先ArrayList里面的每个元素置为null,然后等待JVM的GC的垃圾回收,而JVM的垃圾回收时机是不确定的,上层应用代码无法控制。一个对象置为null,也只是告诉JVM,可以回收此对象,而JVM会不会回收、何时回收,取决于JVM,不取决于 list=null 这句代码。原创 2024-03-21 23:11:17 · 976 阅读 · 0 评论 -
Kotlin runBlocking CoroutineScope synchronized简单死锁场景
Java并发多线程环境中,造成死锁的最简单的场景是:多线程中的一个线程T_A持有锁L1并且申请试图获得锁L2,而多线程中另外一个线程T_B持有锁L2并且试图申请获得锁L1。线程的锁申请操作是阻塞的,于是造成线程T_A和线程T_B无法正确获得想要的锁,两个线程被阻塞进入死锁状态。Java并发多线程环境中,造成死锁的最简单的场景是:多线程中的一个线程T_A持有锁L1并且申请试图获得锁L2,而多线程中另外一个线程T_B持有锁L2并且试图申请获得锁L1。A-0 申请 lock1...A-0 申请lock2...原创 2024-03-20 23:04:15 · 1066 阅读 · 0 评论 -
Android TransactionTooLargeException排查定位
文章浏览阅读422次。文章浏览阅读5.5k次。本文作者:Zhang Phil原文链接:Android Activity生命周期以及onSaveInstanceState、onRestoreInstanceState要点备忘一般的,当Android activity的生命周期进入onPause后,Android系统紧接着就要回调:protected void onSaveInstanceState_activity生命周期 onsaveinstane。原创 2024-03-19 23:59:41 · 879 阅读 · 0 评论 -
Kotlin runBlocking CoroutineScope launch async
runBlocking 内部启动的3个协程做耗时操作,从输出可以看到3个协程交叉并发执行,runBlocking 会等到3个协程执行结束后才退出,输出结果有明确先后顺序。kotlin的runBlocking 当内部相同作用域的所有协程都运行结束后,在 runBlocking 之后的代码才能执行, runBlocking 会阻塞所在线程。kotlin的runBlocking 当内部相同作用域的所有协程都运行结束后,在 runBlocking 之后的代码才能执行, runBlocking 会阻塞所在线程。原创 2024-03-18 23:15:13 · 1068 阅读 · 0 评论 -
Android onViewAttachedToWindow onWindowAttached onPreDraw onDraw onGlobalLayout,Kotlin
文章浏览阅读2.9k次。Android自定义ViewGroup:onMeasure与onLayout(1)Android自定义一个ViewGroup,需要重写ViewGrouo里面的两个最重要的回调函数onMeasure()与onLayout()。如果开发者自己摆脱Android为我们做好的几套布局(如常见的线1性布局、相对布局、帧布局等等),往底层实现view呈现,那么我们就得在ViewGroup中小心计算_android viewgroup onmeasure onlayout。原创 2024-03-16 00:19:12 · 966 阅读 · 0 评论 -
Kotlin/Java中String的equals和==
,而此时再次对s进行操作改变s的值时候,如再次给s赋值使得s=”_string类的字符串与stringbuffer类的字符串判断是否相同。每次Java/Kotlin定义/创建一个String后,如果String内存缓存池内不存在给定值比如"zhang"相同的String对象,那么此时Java将为此创建新的String对象,并存放在String缓存池内。如果String缓存池内存中有与指定值相同的String对象,那么此时Java将不创建新String对象,而直接返回已存在的String对象的引用。原创 2024-03-14 23:03:01 · 711 阅读 · 0 评论 -
Android Bundle putBinder传输超过1MB数据,Kotlin
文章浏览阅读422次。_安卓开发系统切换主题 重走生命周期。文章浏览阅读5.5k次。本文作者:Zhang Phil原文链接:Android Activity生命周期以及onSaveInstanceState、onRestoreInstanceState要点备忘一般的,当Android activity的生命周期进入onPause后,Android系统紧接着就要回调:protected void onSaveInstanceState_activity生命周期 onsaveinstane。原创 2024-03-13 23:12:12 · 1061 阅读 · 0 评论 -
Kotlin/Java重写equals后==表现(2)
因为重写了equals方法,那么== 或者 equals 比较两个对象是否相同,则调用重写后的equals方法,而equals方法只是比较两个对象的id,而id都是2024,所以均返回true。原创 2024-03-07 23:09:09 · 560 阅读 · 0 评论 -
Kotlin/Java hashCode与equals/==号(1)
如果定义的Kotlin/Java对象没有重写hashCode和equals,那么Kotlin/Java就调用根(super)的Obejct的hashCode()和equals()方法。Kotlin/Java比较两个对象是否相同的equals方法(相当于==),是根据两个对象的内存地址,如果默认不重写hashCode()实现,即可以简单理解为比较hashCode()的值是否相等,因为hashCode()值即为内存地址值。Kotlin/Java的hashCode()方法默认返回对象在内存中地址的整数值。原创 2024-03-06 23:18:50 · 467 阅读 · 0 评论 -
Android挖取原图手指触点区域RectF(并框线标记)放大到ImageView宽高与矩阵mapRadius,Kotlin
Android BitmapFactory.decodeResource读取原始图片装载成原始宽高Bitmap,Kotlin_bitmapfactory解码宽高-CSDN博客。Android矩阵setRectToRect裁剪Bitmap原图Matrix放大,mapRect标记中心区域,Kotlin-CSDN博客。实现的是把原图中心区域的一片小图挖取出来放大放到下面的ImageView里面,现在不再固定中心位置,而是以手指在上图的触点位置为中心位置,挖取一片区域图放大,然后放到下面的ImageView里面。原创 2024-03-02 00:03:19 · 1232 阅读 · 1 评论 -
Glide报错:java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
原因是Glide在后台线程加载一个资源回来后,上层activity已销毁。原创 2024-02-26 23:03:25 · 329 阅读 · 0 评论 -
Android RecyclerView AsyncListDiffer DiffUtil,Kotlin(b)
【代码】Android RecyclerView AsyncListDiffer DiffUtil,Kotlin(b)原创 2024-02-25 23:02:50 · 392 阅读 · 0 评论 -
Android BitmapDrawable.bitmap与BitmapFactory.decodeResource获取不到原始图像素级真实宽高,Kotlin
文章浏览阅读1.8k次。Android传递Bitmap的两种简单方式及其缺陷_android上传bitmap_zhangphil的博客-CSDN博客。Android BitmapFactory.decodeResource读取原始图片装载成原始宽高Bitmap,Kotlin_bitmapfactory解码宽高-CSDN博客。Android BitmapFactory.decodeResource读取原始图片装载成原始宽高Bitmap,Kotlin_bitmapfactory解码宽高-CSDN博客。原创 2024-02-24 23:02:53 · 1206 阅读 · 0 评论 -
Kotlin filterIsInstance filterNotNull forEach
一、flow ,emit,onCompletion,collect。四、map,重组改写数据。八、conflate 合并。九、debounce去重。二、函数作为flow。kotlin协程flow filter map flowOn zip combine(1)_zhangphil的博客-CSDN博客。Kotlin HashMap entries.filter过滤forEach_kotlin map.entries.foreach-CSDN博客。原创 2024-02-23 23:06:25 · 627 阅读 · 0 评论 -
Android横竖屏切换configChanges=“screenSize|orientation“避免activity销毁重建,Kotlin
Android重写onConfigurationChanged规避横竖屏切换时候重新进入onCreate生命周期Android系统内在的机制,当activity在横竖屏切换时候,会强制重新开始进入activity的生命周期onCreate,在有些特殊的场景,开发者不希望重新进入onCreate生命周期,那么,可以通过重写Android的onConfigurationChanged规避。那么,每次横竖屏切换都会重新走onCreate() ... onDestory()生命周期,即消耗重建。原创 2024-02-22 23:04:22 · 881 阅读 · 0 评论 -
Android RecyclerView AsyncListDiffer DiffUtil,Kotlin(a)
文章浏览阅读410次。基于Android官方Paging Library的RecyclerView分页加载框架我之前写了一篇RecyclerView分页加载机制的文章,是基于Android官方的AsyncListUtil实现的,详情见附录文章1。基于Android官方Paging Library的RecyclerView分页加载框架我之前写了一篇RecyclerView分页加载机制的文章,是基于Android官方的AsyncListUtil实现的,详情见附录文章1。原创 2024-02-21 23:06:52 · 743 阅读 · 0 评论 -
Android挖取原图中心区域RectF(并框线标记)放大到ImageView宽高,Kotlin
文章浏览阅读853次。【代码】Android矩阵setRectToRect裁剪Bitmap原图Matrix放大,mapRect标记中心区域,Kotlin。Android BitmapFactory.decodeResource读取原始图片装载成原始宽高Bitmap,Kotlin_bitmapfactory解码宽高-CSDN博客。Android矩阵setRectToRect裁剪Bitmap原图Matrix放大,mapRect标记中心区域,Kotlin-CSDN博客。原创 2024-02-20 23:09:14 · 1042 阅读 · 0 评论