- 博客(2035)
- 资源 (15)
- 收藏
- 关注

原创 我写的《高性能Android开发技术》一书已正式出版全国发行
我写的《高性能Android开发技术》一书,已由北京航空航天大学出版社正式出版并全国发行,京东上的发售页面链接地址:https://item.jd.com/12602702.html感谢北京航空航天大学出版社,感谢北京航空航天大学出版社的董宜斌先生、张冀青老师,感谢CSDN,感谢给予我帮助和支持的人!谢谢你们!我的邮箱:zhangphil@live.com...
2019-05-11 23:10:56
4286
13
原创 SurfaceFlinger及Android应用RenderThread角度观察Jank丢帧卡顿
在Android系统中,Jank(卡顿)问题主要涉及CPU、GPU和Display三个部分。CPU负责计算帧数据,GPU进行图形渲染,渲染后的数据存储在Buffer中,最后由Display呈现到屏幕。Google在Android 4.1中引入了Project Butter,通过Vsync信号优化了帧处理流程,确保CPU和GPU在收到Vsync信号后立即处理下一帧数据。应用在绘制前需从SurfaceFlinger管理的BufferQueue申请Buffer,渲染完成后通过queueBuffer将数据返回给Bu
2025-05-23 23:03:23
417
原创 git merge解冲突后,add、continue提交
在Git中,合并分支时若遇到冲突,需手动解决冲突后执行git add .命令,然后继续正常的代码提交流程,包括git commit和git push。对于仅需合并其他分支的个别文件到当前分支的情况,不应使用git merge,而应先将所需文件从目标分支检出到当前分支,再进行常规的git add、git commit和git push操作。这种方法适用于仅需合并特定文件的场景,避免了不必要的合并操作。
2025-05-22 23:45:41
235
原创 Android trace presentFence屏幕显示的帧
在Android系统中,presentFence是屏幕显示帧的关键信号,当帧成功显示时,presentFence会发出信号。FrameMissed、GpuFrameMissed和HwcFrameMissed表示上一次合成的结果,SurfaceFlinger在每次被Vsync-sf唤醒时会检查上一次合成的presentFence是否已发出信号,若未发出则认为是帧丢失。BufferTx在queueBuffer后增加,在SurfaceFlinger合成时减少,其内有可用Buffer时,SurfaceFlinger
2025-05-20 23:46:00
918
原创 Android trace中CPU的RenderThread与GPU
在Android系统中,RenderThread是负责GPU渲染的关键线程,它通过dequeueBuffer和queueBuffer机制与GPU进行交互,执行图形图像的密集渲染任务。RenderThread的存在解耦了Android的UI主线程与GPU渲染,避免了UI线程的阻塞,同时充分利用了GPU的并行计算能力,减少了栅格化的耗时。在硬件加速开启的情况下,RenderThread与GPURenderThread协同工作,通过SurfaceFlinger进行图像合成和显示。如果应用关闭硬件加速,则只有UIT
2025-05-16 23:06:53
1020
1
原创 Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(七)
本文在之前的基础上,进一步优化了Android应用中Coil 3.2.0版本加载缩略图和正式图的实现。主要改进点在于,当正式图加载完成后,主动删除缓存中的缩略图,以节省内存资源。文章提供了相关的Kotlin代码示例,并指出尽管配置了磁盘缓存路径,但实际运行时缓存文件为空,表明磁盘缓存未生效。作者建议将缩略图和正图的内存缓存合并为单一缓存系统,以提升性能。此外,文章还列出了所需的权限声明和Coil库的依赖项,包括对GIF、视频和SVG格式的支持。更多细节可参考CSDN博客链接。
2025-05-15 23:10:18
528
原创 Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(六)
本文介绍了在Android应用中使用Coil 3.2.0版本加载缩略图和正式图的实现方法,并提供了相关的Kotlin代码示例。文章提到,尽管配置了磁盘缓存路径,但实际运行时缓存文件为空,表明磁盘缓存未生效。此外,作者建议将缩略图和正图的内存缓存合并为单一缓存系统,以优化性能。文章还列出了所需的权限声明和Coil库的依赖项,包括对GIF、视频和SVG格式的支持。更多细节可参考CSDN博客链接。
2025-05-14 23:32:48
446
原创 Kotlin高阶函数多态场景条件判断与子逻辑
Kotlin高阶函数允许将函数作为参数传递,实现多态场景下的条件判断与子逻辑切换。在示例代码中,somefun是一个高阶函数,根据条件分别指向multi和add函数,分别实现乘法与加法操作。通过invoke方法调用函数,动态执行不同逻辑。这种设计在Android开发中尤为有用,例如将耗时操作从主线程切换到非主线程执行,处理完成后将结果返回主线程。Kotlin的高阶函数特性简化了复杂逻辑的实现,提升了代码的灵活性与可维护性。
2025-05-10 23:12:27
1055
原创 Android kernel日志中healthd关键词意义
在Android内核日志中,healthd关键词用于记录电池相关信息,包括电池温度、剩余电量、电压、电池健康和状态等。具体指标如level表示剩余电量,voltage为电压,temperature为电池温度,status表示电池状态(如充电或未充电),health表示电池健康状况(如良好或过热)。这些信息在系统源码的头文件中通过枚举定义,如BATTERY_STATUS_CHARGING和BATTERY_HEALTH_GOOD。此外,Android的JIT(即时编译)技术通过ART(Android Runti
2025-05-09 23:08:31
936
原创 Android RecyclerView自带的OnFlingListener,Kotlin
文章浏览阅读338次。Android不用OnScrollListener采用GestureDetector结合OnTouchListener实现ListView下拉/上拉刷新通常Android的ListView的下拉/上拉刷新实现,使用OnScrollListener比较简单,比如如果要实现下拉见顶刷新,思路是在OnScrollListener判断当前ListView的滚动状态,如果滚动停止,则将此时Lis。文章浏览阅读428次。
2025-05-08 23:13:52
713
原创 Android RecyclerView横竖屏OnGlobalLayoutListener/OnPreDrawListener/onDraw/onMeasure/onLayout值变化,Kotlin
文章浏览阅读2.9k次。Android可收缩/扩展的TextView【1】在一些应用中,比如腾讯的应用市场APP应用宝,关于某款应用的介绍文字,如果介绍文字过长,那么不是全部展现出来,而是显示三四行的开始部分(摘要),预知全部的内容,用户点击展开按钮即可查阅全部内容。这样的设计有一定的优越性,毕竟用户的时间有限,注意力和关注力也有限,在使用APP时候,用户需要在最短时间内尽可能快速浏览和查阅到更主要内容,_android 可扩展文本框。
2025-05-06 23:10:53
903
原创 Android JIT编译:adb shell cmd package compile选项
Android Runtime (ART) 包含一个具备代码分析功能的即时 (JIT) 编译器,该编译器可以在 Android 应用运行时持续提高其性能。JIT是Just In Time Compiler,即时编译技术。ART 引入了预先编译机制,可提高应用的性能。在安装时,ART 使用设备自带的 dex2oat 工具来编译应用。Android JIT( ART即时编译器),Just In Time Compiler,即时编译技术-CSDN博客。
2025-05-01 23:27:29
1312
原创 Android启动应用时屏蔽RecyclerView滑动,延时后再允许滑动,Kotlin
文章浏览阅读338次。Android不用OnScrollListener采用GestureDetector结合OnTouchListener实现ListView下拉/上拉刷新通常Android的ListView的下拉/上拉刷新实现,使用OnScrollListener比较简单,比如如果要实现下拉见顶刷新,思路是在OnScrollListener判断当前ListView的滚动状态,如果滚动停止,则将此时Lis。文章浏览阅读428次。
2025-04-29 23:16:57
1041
原创 Kotlin await等待多个异步任务都完成后才进行下一步操作
这在业务开发中比较有用,试想一种场景,一个任务c的执行,必须依赖(等待)另外两个并行子任务a,b的结果,但这两个并行任务a、b何时结束何时返回结果并不确定。把a、b包装成suspend任务,通过关键字await(),等待两个异步任务a,b都完成后才进行下一步c。文章浏览阅读1.9k次。本文详细介绍Java并发中CountDownLatch的使用方法,演示如何利用它等待一组线程完成后再执行后续操作,适用于需要同步多个线程场景。代码运行后,必须等待a,b两个异步任务都返回结果后才能进行下一步操作。
2025-04-28 23:26:21
1139
原创 Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(五)
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。2、现在分别使用缩略图内存缓存和正图内存缓存,感觉应该可以合并,只使用一套内存缓存。
2025-04-27 23:18:44
941
原创 Android JIT( ART即时编译器),Just In Time Compiler,即时编译技术
Android Runtime (ART) 包含一个具备代码分析功能的即时 (JIT) 编译器,该编译器可以在 Android 应用运行时持续提高其性能。JIT是Just In Time Compiler,即时编译技术。JIT:以下是 ART 实现的一些主要功能。ART 引入了预先编译机制,可提高应用的性能。ART 还具有比 Dalvik 更严格的安装时验证。在安装时,ART 使用设备自带的 dex2oat 工具来编译应用。
2025-04-26 23:12:56
784
原创 Kotlin协程Semaphore withPermit约束并发任务数量
本文介绍了如何使用Kotlin的协程和Semaphore进行并发控制,确保在并发环境中A、B、C三个任务按照顺序运行,即使引入Java版Semaphore也会有不同表现。简单的说,Semaphore的permits约束了同时并发的协程任务数量。当并发任务数量超过permits后,多出来的任务就要等待permits数量内的任务完成后、空出余量才能投入运行。c end 耗时=1007 @1744098014457。b end 耗时=1007 @1744098014457。1、当 permits = 1。
2025-04-18 23:06:14
966
原创 Kotlin整数相除精度损失roundToInt
Java小数点数字和百分号数字之间的转换小数点数字和百分号(百分比)数字之间的转换在证券金融业很常见,需要经常进行两者之间相互转换。文章讨论了Kotlin中浮点数(如1.7f)与整数(如Int)进行乘法、除法时可能出现的精度损失,并给出了示例。Kotlin toInt() +0.5 toInt() Math.round()_kotlin math.round-CSDN博客。Kotlin浮点数Float整数Int乘*除/精度损失_kotlin float乘法 精度丢失-CSDN博客。
2025-04-17 23:03:55
812
原创 Android ViewStub显示VISIBLE与消失GONE,Kotlin(2)
CPU返回后,会直接将GraphicBuffer提交给SurfaceFlinger,告诉SurfaceFlinger进行合成,但是这个时候GPU可能并未完成之前的图像渲染,这时候就牵扯到一个同步,Android中,用的是Fence机制,SurfaceFlinger合成前会查询Fence,如果GPU渲染没有结束,则等待GPU渲染结束,GPU结束后,会通知SurfaceFlinger进行合成,SF合成后,提交显示,最终完成图像的渲染显示。
2025-04-16 23:14:14
361
原创 Android ExifInterface rotationDegrees图旋转角度,Kotlin
《Android大图片之变换缩略图,以及对原始大图片按照指定宽、高裁剪成缩略图》在Android的ImageView加载图像资源过程中,出于性能和内存开销的需要,有时候需要把一个原始的超大图片按照一定比例等比例缩放成较小的缩略图,或者需要把原始的超大图片,裁剪成指定宽高值的较小图片,针对这种开发需求,可以使用Android SDK自身提供的工具类:ThumbnailUtils完成。Android旋转动画rotate动画,xml配置set实现_android xml 旋转动画-CSDN博客。
2025-04-15 23:17:10
855
原创 Android Coil 3 Fetcher大批量Bitmap拼接成1张扁平宽图,Kotlin(2)
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。
2025-04-13 23:20:28
280
原创 Android Coil 3默认P3色域图加载/显示不出来
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。2、现在分别使用缩略图内存缓存和正图内存缓存,感觉应该可以合并,只使用一套内存缓存。
2025-04-11 23:06:34
345
原创 Android ViewStub显示VISIBLE与消失GONE,Kotlin
CPU返回后,会直接将GraphicBuffer提交给SurfaceFlinger,告诉SurfaceFlinger进行合成,但是这个时候GPU可能并未完成之前的图像渲染,这时候就牵扯到一个同步,Android中,用的是Fence机制,SurfaceFlinger合成前会查询Fence,如果GPU渲染没有结束,则等待GPU渲染结束,GPU结束后,会通知SurfaceFlinger进行合成,SF合成后,提交显示,最终完成图像的渲染显示。
2025-04-10 23:08:44
764
原创 Android Coil 3 Fetcher大批量Bitmap拼接成1张扁平宽图,Kotlin
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。
2025-04-09 23:13:41
1015
原创 Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(四)
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。2、现在分别使用缩略图内存缓存和正图内存缓存,感觉应该可以合并,只使用一套内存缓存。
2025-04-08 23:26:17
612
原创 Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(三)
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。2、现在分别使用缩略图内存缓存和正图内存缓存,感觉应该可以合并,只使用一套内存缓存。
2025-04-07 23:21:12
356
原创 Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(二)
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。2、现在分别使用缩略图内存缓存和正图内存缓存,感觉应该可以合并,只使用一套内存缓存。
2025-04-01 23:04:15
547
原创 Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。2、现在分别使用缩略图内存缓存和正图内存缓存,感觉应该可以合并,只使用一套内存缓存。
2025-03-26 23:50:13
581
原创 Android RequestListener onResourceReady return值,Kotlin
从很小的宽高开始,不断迭代增加setRectToRect的目标RectF的宽高,每次迭代加上一定时延,实现Matrix基础上的动画。【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。
2025-03-24 23:10:58
466
1
原创 Android报错:java.lang.IllegalArgumentException: Software rendering doesn‘t support hardware bitmaps
【代码】Android报错:java.lang.IllegalArgumentException: Software rendering doesn‘t support hardware bitmaps。
2025-03-23 23:09:02
280
原创 Android Coil3缩略图直接内存复用,Kotlin(6)
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。2、现在分别使用缩略图内存缓存和正图内存缓存,感觉应该可以合并,只使用一套内存缓存。
2025-03-22 23:12:44
346
原创 概率算法:从1到1000,使得这全部一千个数字中的60%被选中,Kotlin
给定长度值length,把列表切分成每段长度为length的N段列表,Kotlin_zhangphil的博客-CSDN博客。扁平的MutableList元素每隔若干元素一组装入新MutableList,Kotlin-CSDN博客。给定长度值length,把列表切分成每段长度为length的N段列表,Kotlin_zhangphil的博客-CSDN博客。扁平的MutableList元素每隔若干元素一组装入新MutableList,Kotlin_kotlin mutablelist3个一组-CSDN博客。
2025-03-21 23:38:13
768
原创 Android Coil3 Fetcher preload批量Bitmap拼接扁平宽图,Kotlin
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。
2025-03-20 23:29:23
580
原创 Android Coil3阶梯preload批量Bitmap拼接扁平宽图,Kotlin
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。
2025-03-19 23:28:37
1253
原创 Android Coil3 custom transformations CircleCropTransformation cache into memory,Kotlin
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。2、现在分别使用缩略图内存缓存和正图内存缓存,感觉应该可以合并,只使用一套内存缓存。
2025-03-18 23:50:48
953
原创 Android Coil3圆形CircleCropTransformation 、 圆角矩形RoundedCornersTransformation,Kotlin
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。2、现在分别使用缩略图内存缓存和正图内存缓存,感觉应该可以合并,只使用一套内存缓存。
2025-03-17 23:14:38
408
原创 Android Glide AppGlideModule DataFetcher loadThumbnail, Kotlin
从很小的宽高开始,不断迭代增加setRectToRect的目标RectF的宽高,每次迭代加上一定时延,实现Matrix基础上的动画。【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。
2025-03-12 23:32:13
899
原创 Android原生gif动图加载AnimatedImageDrawable
Android加载Gif和ImageView的通用解决方案:android-gif-drawable(1)Android自己的ImageView或者View不能直接加载运行Gif图片,如果要在一个Android的ImageView中加载一个gif图片资源,则需要通过其他途径实现,我之前写了一些关于如何在Android中加载gif图片的文章:文章1,《基于开源框架Glide加载Gif_activity添加gif。
2025-03-08 23:09:05
853
原创 potplayer前进后退D、F键并未逐帧播放
在 选项 - 播放 -时间跨度 里面, 可以把默认的那个按照关键帧移动单位勾选去掉,同时设置左右方向键时间间隔。原因是PotPlayer默认是按照关键帧作为左右、前进移动标准的。
2025-03-07 23:05:25
464
原创 Android Coil3缩略图、默认占位图placeholder、error加载错误显示,Kotlin(5)
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。2、现在分别使用缩略图内存缓存和正图内存缓存,感觉应该可以合并,只使用一套内存缓存。
2025-03-06 23:20:24
1038
链家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关注的人