- 博客(1902)
- 资源 (15)
- 收藏
- 关注
原创 Android抛错:View W XXXView not displayed because it is too large to fit into a software layer (or draw
CPU返回后,会直接将GraphicBuffer提交给SurfaceFlinger,告诉SurfaceFlinger进行合成,但是这个时候GPU可能并未完成之前的图像渲染,这时候就牵扯到一个同步,Android中,用的是Fence机制,SurfaceFlinger合成前会查询Fence,如果GPU渲染没有结束,则等待GPU渲染结束,GPU结束后,会通知SurfaceFlinger进行合成,SF合成后,提交显示,最终完成图像的渲染显示。
2024-05-21 23:30:16 1013
原创 Android Glide PreloadTarget transform LOCAL/RESOURCE_DISK_CACHE to Bitmap,fill into MEMORY_CACH
【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。现在结合他人的代码加以修改,给出一个以原始图形中心为原点,修剪图片为头像的工具类,此类可以直接在布局文件中加载使用,比。文章浏览阅读670次。
2024-05-20 23:03:50 739
原创 Android Studio的JVM编译选项-XX:MaxPermSize高版本JDK抛错
原因是Java VM option的MaxPermSize选项,存在于Java 11 ~ Java 17,在Java 17以后的新/高版Java,MaxPermSize不再支持且被删除。
2024-05-19 23:08:50 518
原创 Android RecyclerView calculateExtraLayoutSpace force Glide filling full Memory(EMORY_CACHE)(二)
【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。现在结合他人的代码加以修改,给出一个以原始图形中心为原点,修剪图片为头像的工具类,此类可以直接在布局文件中加载使用,比。文章浏览阅读670次。
2024-05-18 23:04:01 324
原创 Android性能分析:卡顿丢帧基础CPU/GPU原理(4)
产生 Jank 的那一帧的显示期间,GPU/CPU 在闲置的。CPU返回后,会直接将GraphicBuffer提交给SurfaceFlinger,告诉SurfaceFlinger进行合成,但是这个时候GPU可能并未完成之前的图像渲染,这时候就牵扯到一个同步,Android中,用的是Fence机制,SurfaceFlinger合成前会查询Fence,如果GPU渲染没有结束,则等待GPU渲染结束,GPU结束后,会通知SurfaceFlinger进行合成,SF合成后,提交显示,最终完成图像的渲染显示。
2024-05-16 23:10:34 1174
原创 Android RecyclerView calculateExtraLayoutSpace force Glide filling full Memory(EMORY_CACHE),Kotlin
【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。现在结合他人的代码加以修改,给出一个以原始图形中心为原点,修剪图片为头像的工具类,此类可以直接在布局文件中加载使用,比。文章浏览阅读670次。
2024-05-15 23:07:43 1021
原创 Android性能:SurfaceFlinger与BufferQueue(3)
t 时长,20s,20秒的trace文件。CPU返回后,会直接将GraphicBuffer提交给SurfaceFlinger,告诉SurfaceFlinger进行合成,但是这个时候GPU可能并未完成之前的图像渲染,这时候就牵扯到一个同步,Android中,用的是Fence机制,SurfaceFlinger合成前会查询Fence,如果GPU渲染没有结束,则等待GPU渲染结束,GPU结束后,会通知SurfaceFlinger进行合成,SF合成后,提交显示,最终完成图像的渲染显示。就是 Buffer。
2024-05-14 23:26:07 1308
原创 Android adb shell关于CPU核的命令
Android adb shell dump当前手机设备的所有activity_dump当前activity_zhangphil的博客-CSDN博客。adb shell top -m 10 -s 1 -d 1 -o %CPU,%MEM,TIME+,PID,COMMAND,CMDLINE_adb shell top -m 10 -s cpu-CSDN博客。当前CPU0核(编号为0的核,如果是其他核,换成cpu+序号,后同)的工作频率。编号为7的CPU的核的支持的主频率列表 (单位: 千赫兹)。
2024-05-13 23:35:59 1357
原创 Android性能:高版本Android关闭硬件加速GPU渲染滑动卡顿掉帧
CPU返回后,会直接将GraphicBuffer提交给SurfaceFlinger,告诉SurfaceFlinger进行合成,但是这个时候GPU可能并未完成之前的图像渲染,这时候就牵扯到一个同步,Android中,用的是Fence机制,SurfaceFlinger合成前会查询Fence,如果GPU渲染没有结束,则等待GPU渲染结束,GPU结束后,会通知SurfaceFlinger进行合成,SF合成后,提交显示,最终完成图像的渲染显示。
2024-05-12 23:03:02 1082
原创 Android GPU渲染SurfaceFlinger合成RenderThread的dequeueBuffer/queueBuffer与fence机制(2)
t 时长,20s,20秒的trace文件。CPU返回后,会直接将GraphicBuffer提交给SurfaceFlinger,告诉SurfaceFlinger进行合成,但是这个时候GPU可能并未完成之前的图像渲染,这时候就牵扯到一个同步,Android中,用的是Fence机制,SurfaceFlinger合成前会查询Fence,如果GPU渲染没有结束,则等待GPU渲染结束,GPU结束后,会通知SurfaceFlinger进行合成,SF合成后,提交显示,最终完成图像的渲染显示。就是 Buffer。
2024-05-10 23:02:25 1696
原创 卡顿丢帧分析adb shell命令
Android ADB调试真机设备Android ADB(Andorid Debug Bridge),是Android开发中有用的测试和调试工具。使用Android ADB调试设备,直接在Windows的dos命令窗口输入命名adb即可,如图:为什么执行adb命令后是这样?Android ADB(Andorid Debug Bridge)调试真机设备_adb在线执行器_zhangphil的博客-CSDN博客。-t 时长,20s,20秒的trace文件。
2024-05-09 23:30:07 497
原创 Android GPU渲染屏幕绘制显示基础概念(1)
CPU返回后,会直接将GraphicBuffer提交给SurfaceFlinger,告诉SurfaceFlinger进行合成,但是这个时候GPU可能并未完成之前的图像渲染,这时候就牵扯到一个同步,Android中,用的是Fence机制,SurfaceFlinger合成前会查询Fence,如果GPU渲染没有结束,则等待GPU渲染结束,GPU结束后,会通知SurfaceFlinger进行合成,SF合成后,提交显示,最终完成图像的渲染显示。而对SF来说,只要有合成任务,它就得再去申请VSYNC-sf。
2024-05-08 23:32:42 1753
原创 Android Studio查看xml文件的修改时间和记录
android studio自带手机投屏功能_android studio 投屏_zhangphil的博客-CSDN博客。android studio自带手机投屏功能_android studio 投屏-CSDN博客。android studio自带手机投屏功能_android studio 投屏_zhangphil的博客-CSDN博客。android studio自带手机投屏功能_android studio 投屏_zhangphil的博客-CSDN博客。
2024-05-07 23:27:22 966
原创 Android硬件加速hardwareAccelerated支持/不支持的绘图接口
三Buffer轮转情况下,基本不会有这种情况的发生,渲染线程一般在 dequeueBuffer 时,都可以顺利拿到可用的 Buffer (如果 dequeueBuffer 本身耗时那就也会拉长时间)。在Android早期的版本,由于硬件制造商差异大,增加了这一开关,但随着Android系统版本的迭代,以及硬件技术水平提升,现有的绝大多数Android手机硬件层面均已支持硬件加速(GPU渲染),Android本身也只有有限几个接口不支持硬件加速。
2024-05-06 23:17:16 916
原创 Android log tag标签如am_pss意义
Android Studio移动.gradle文件夹重新设置新路径_android studio设置gradle路径_zhangphil的博客-CSDN博客。android studio自带手机投屏功能_android studio 投屏_zhangphil的博客-CSDN博客。android studio自带手机投屏功能_android studio 投屏-CSDN博客。android studio自带手机投屏功能_android studio 投屏_zhangphil的博客-CSDN博客。
2024-04-29 23:28:12 816
原创 Android性能:Double Buffer双缓冲/Triple Buffer三缓冲丢帧Jank与无丢帧No Jank
Android ADB调试真机设备Android ADB(Andorid Debug Bridge),是Android开发中有用的测试和调试工具。使用Android ADB调试设备,直接在Windows的dos命令窗口输入命名adb即可,如图:为什么执行adb命令后是这样?_android 抓trace。三Buffer轮转情况下,基本不会有这种情况的发生,渲染线程一般在 dequeueBuffer 时,都可以顺利拿到可用的 Buffer (如果 dequeueBuffer 本身耗时那就也会拉长时间)。
2024-04-27 23:04:53 1164
原创 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 951
原创 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 1088
原创 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 401
原创 Android GridLayoutManager getExtraLayoutSpace RecyclerView与Glide预加载屏幕外不可见区域,Kotlin
【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。现在结合他人的代码加以修改,给出一个以原始图形中心为原点,修剪图片为头像的工具类,此类可以直接在布局文件中加载使用,比。文章浏览阅读670次。
2024-04-20 23:42:18 724
原创 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 697
原创 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 1147
原创 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 1048
原创 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 1226
原创 Android GridLayoutManager SpanSizeLookup dynamic set grid cell column count,Kotlin
Android RecyclerView的StaggeredGridLayoutManager实现交错排列的子元素分组先看实现的结果如图:设计背景:现在的产品对设计的需求越来越多样化,如附录文章2是典型的联系人分组RecyclerView,子元素排列到一个相同的组,但是有些时候,UI要求把这些元素不是垂直方向的,而是像本文开头的图中所示样式排列,这就需要用StaggeredGridLayoutMa_staggeredgridlayoutmanager。
2024-04-14 23:30:41 894
原创 Android Glide裁剪centerCrop到fitCenter,复用内存缓存Bitmap加工TransformationUtils.fitCenter,Kotlin
Android RoundedBitmapDrawable:Android官方的圆角图形图象实现方案RoundedBitmapDrawable是Android在support v4的扩展包中新增的实现圆角图形的关键类,借助RoundedBitmapDrawable的帮助,可以轻松的以Android标准方式实现圆角图形图象。现在结合他人的代码加以修改,给出一个以原始图形中心为原点,修剪图片为头像的工具类,此类可以直接在布局文件中加载使用,比。所实现的在Kotlin动态代码中绘制的描边效果。
2024-04-13 23:02:42 1277
原创 Android RecyclerView性能优化及Glide流畅加载图片丢帧率低的一种8宫格实现,Kotlin
【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。现在结合他人的代码加以修改,给出一个以原始图形中心为原点,修剪图片为头像的工具类,此类可以直接在布局文件中加载使用,比。文章浏览阅读670次。
2024-04-12 23:03:40 966
原创 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 1849
原创 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 825
原创 Are Android Glide placeholders loaded asynchronously?
在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。假设实现一个简单的功能,对传入要加载的path路径增加一定的筛选、容错或“重定向”,需要自定义一个模型,基于这个模型,让Glide自动匹配模型展开加载。
2024-04-09 23:23:15 593
原创 git查看单独某一个文件的历史修改记录
文章浏览阅读1.8k次。git统计历史上某一段时间代码的修改量有两个方法,一个是git log的since - until,另外一个是git log after before,例如: git log --after="2018-04-16 00:00:00" --before="2018-04-16 10:11:12" --stat或者:git log --since="2018-04-16 01:10:00" --un..._gitee指定时间段代码量统计。..._git --no-pager 作用。
2024-04-08 23:38:58 844
原创 Android协程GlobalScope、lifecycleScope、CoroutineScope的launch,Kotlin
文章浏览阅读449次。coroutineScope 创建独立协程作用域,直到所有启动的协程都完成后才结束自己。则控制台没有任何输出,kotlin协程在launch时候启动一个协程,不阻塞线程,main主函数迅速运行完成,并退出,但此时在for循环启动的线程还没有运行输出就因为main主线程的退出而不可见(系统销毁)。GlobalScope.launch 创建一个顶级协程,它很轻,但运行时还是会消耗内存资源,且可以一直运行直到整个应用程序停止退出,这很可能导致内存泄露,谨慎使用 GlobalScope。
2024-04-07 23:26:29 1048
原创 Android Glide配置AppGlideModule定制化线程池,Kotlin(1)
在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。文章浏览阅读670次。假设实现一个简单的功能,对传入要加载的path路径增加一定的筛选、容错或“重定向”,需要自定义一个模型,基于这个模型,让Glide自动匹配模型展开加载。文章浏览阅读670次。
2024-04-03 23:07:59 1369
原创 Android Studio的Profiler生成trace排查Android冷启动耗时,Kotlin
注意,上面的调用层次结构自上往下即是函数方法的调用链,上面的函数启动了下面的函数。此时AS下面就会自动记录、生成trace,因为只是排查冷启动阶段耗时,所以可以阶段很多时间trace即可,但至少需要大于1500ms,因为那两个耗时方法需要覆盖到。上面有两个方法耗时:mySleep500()和mySleep1000(),目标是通过Profiler的trace把这两个冷启动阶段的耗时方法找到。利用AS自带的Profiler抓取trace排查定位冷启动耗时方法,不用写代码,直接配置AS即可完成。
2024-04-02 23:45:59 2154
原创 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 765
原创 Android RecyclerView canScrollVertically方向与返回值,Kotlin
Android RecyclerView滑动到底部/上拉/上拉见底自动加载更多实现以及点击/长按事件处理Android RecyclerView下拉加载更多有Android谷歌官方的实现,实现的方式是通过SwipeRefreshLayout把RecyclerView包裹起来,然后就可以通过SwipeRefreshLayout的回调接口实现下拉刷新功能。Android RecyclerView滑动到底部/上拉/上拉见底自动加载更多实现以及点击/长按事件处理_android 模拟上拉事件-CSDN博客。
2024-03-30 23:07:39 744
原创 Android熄屏/亮屏,旋转屏幕/横竖屏切换生命周期变化与activity销毁重建
Android设备屏幕锁定/解锁/屏幕点亮监听Android屏幕锁定,解锁,开屏比较常用,故抽象成一个公共的DeviceScreenListener。在使用使用,首先new出一个DeviceScreenListener,然后注册(register)使用,使用后不要忘记注销,一般在生命周期的onDestory里面unregister。Android设备屏幕锁定/解锁/屏幕点亮监听_android 监听设备解锁完成-CSDN博客。Android熄屏/亮屏,旋转屏幕/横竖屏切换生命周期变化。
2024-03-29 23:12:12 1403
原创 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 1424
原创 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 660
链家2020年9月二手房数据
2020-12-10
strava_com_sample_utf8.xls
2020-12-10
digital-7字体(LED数字样式字体)
2017-09-05
MaterialDesignLibrary_Code and Lib合集
2015-09-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人