自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Android

开发相关知识

  • 博客(63)
  • 收藏
  • 关注

原创 博客目录导航

Android 屏幕适配 TipsAndroid 存储目录详解Android .so 文件使用Android 编译版本、support、主题版本那些事Android 状态栏那些事Android 各版本系统适配的一些注意点Android 系统各版本新特性总结实用性能优化(一):布局实用性能优化(二):图片稳定性(一):Native Crash 信号速查稳定性(二):ANR使用 WebView 时需要注意的一些问题Android Studio Gradle 编译加速RecyclerView 与 ListView

2025-10-13 13:19:43 392

原创 Android System Lib 梳理

Linker 不是 so:/system/bin/linker。libm.so:数学库。

2025-12-22 17:07:27 611

原创 Android 进程简析

2025-12-17 09:11:35 452

原创 稳定性(二):ANR

综述:细分:

2025-12-12 10:38:13 272

原创 稳定性(一):Crash

Java/Kotlin:Native:

2025-12-12 10:31:25 761

原创 Android 渲染(二):Choreographer、SurfaceFlinger、HWComposer

作用:重要方法:

2025-12-12 10:17:08 369

原创 Android 渲染(一):刷新机制

2025-12-12 10:15:46 178

原创 虚拟机(一):JVM

标记-清除算法:分为标记和清除两个阶段。该算法首先从根集合进行扫描,对存活的对象标记,标记完毕后,再扫描整个空间中未被标记的对象并进行回收。整个过程需要暂停整个程序的全部运行线程,让回收线程以单线程进行工作,过程结束再恢复运行线程。标记-整理算法:标记过程仍然与“标记-清除”算法一样,但不是直接对可回收对象进行清理。该算法在回收期间会同时将保留下来的对象移动聚集到连续的内存空间,从而避免内存空间碎片。但对象的移动是需要时间成本的。

2025-12-10 13:10:25 401

原创 虚拟机(三):ART

GetGcType:过程:

2025-12-10 13:04:24 326

原创 虚拟机(二):Dalvik

该垃圾回收算法是否是并行执行的。连Zygote的堆也要清理。是否需要对软引用进行处理等。

2025-12-10 13:02:42 206

原创 CPU 简述

32位:64位:ARM架构:x86架构:

2025-12-10 12:25:01 352

原创 屏幕的几个参数

2025-12-07 12:26:11 166

原创 Android Logger 简述

2025-12-03 15:36:50 161

原创 线程的本质

线程生命周期:同步原语:线程属性:线程局部存储(TLS):

2025-11-26 11:38:14 570

原创 编译知识简析

传统机器层:编程语言主要是CPU指令集(机器指令),和硬件是直接相关的,程序员所用机器指令编写的程序可以交由微程序直接进行解析,而这里提到的指令集,存储在CPU内部,对CPU的运算进行指导和优化,拥有指令集,CPU就可以有效地运行。我们知道,CPU的制造商分为AMD和Intel两大阵营,那么这两大厂商生产的CPU最大的区别是——指令集不同,Intel的CPU所使用的指令集不适合AMD的CPU,同样的,AMD的CPU所使用的指令集也不适合Intel。由此可见,操作系统是在软件和硬件之间的适配层。

2025-11-26 11:32:24 421

原创 Hook 手段总结

字节码:Java:C:PLT (Procedure Linkage Table) GOT(Global Offset Table) Hook:Inline Hook:LD_PRELOAD:

2025-11-26 11:30:30 273

原创 热修复、插件化技术简析

方案:技术:

2025-11-18 12:35:31 144

原创 Android 布局界面结构简析

对象:布局:

2025-10-29 11:43:51 451

原创 WindowManagerService 简析

子窗口(1000~1999): 必须依附于一个父窗口。Dialog在Activity不可见的时候,要主动dismiss掉,否则会因为appToken为空crash。系统窗口(2000~2999): 拥有最高的Z-order,例如状态栏、导航栏、Toast、输入法窗口、系统音量条窗口、系统错误窗口等,可以覆盖在所有应用窗口之上。自由模式:类似于桌面操作系统,应用界面的窗口可以自由拖动和修改大小。分屏模式:将屏幕一分为二,同时显示两个应用的界面。画中画模式:窗口可以一直在最顶层显示。

2025-10-29 11:20:38 554

原创 ActivityManagerService 简析

> ActivityManagerService:服务器。= ApplicationThreadProxy:服务器。客户端:ActivityManagerProxy =客户端:ApplicationThread <=

2025-10-29 11:00:23 990

原创 Android 通信机制简析

2025-10-29 10:33:58 881

原创 Kotlin 协程 Flow 操作符总结

RxJava2 操作符总结Kotlin 协程 Flow 操作符总结

2025-10-13 12:46:01 411

原创 实用性能优化(二):图片

使用Vertor Drawable替代传统的PNG/JPEG图片,能够极大的减少图片资源的大小。传统模式下,针对不同dpi的手机都需要提供一套PNG/JPEG的图片,而如果使用Vector Drawable的话,只需要一个XML文件即可。- PNG能够提供更加清晰无损的图片,但是PNG格式的图片会更大,占用更多的磁盘空间。建议优先提供xhdpi的图片,对于mdpi,ldpi与xxxhdpi根据需要提供有差异的部分即可。- 很多简单图片都能用代码实现,比如圆,矩形等,可以让开发用代码实现,减少包的大小。

2025-03-09 11:43:08 694

原创 实用性能优化(一):布局

使用自定义 View 替代复杂的 View 叠加通过canvas.clipRect()来帮助系统识别那些可见的区域。这个方法可以指定一块矩形区域,只有在这个区域内才会被绘制,其他的区域会被忽视。对于不在屏幕上的元素,可以使用Canvas.quickReject把他们给剔除,避免浪费CPU资源。使用透明度时,通过setLayerType的方法来指定View应该如何进行渲染,从SDK 16开始,我们还可以使用ViewPropertyAnimator.alpha().withLayer()来指定。

2025-03-09 11:38:15 445

原创 RxJava2 操作符总结

RxJava2 操作符总结Kotlin 协程 Flow 操作符总结

2025-03-07 11:08:19 1307 1

原创 Android 屏幕适配 Tips

9 图片只能拉伸不能压缩,压缩会导致图片变形,因此在作图过程中要确定一下图片的最小尺寸,(比如,给出一个确定高度的矩形区域,里面放置一个初始高度大于矩形的 .9 图片,会导致图片压缩)。标注图片时,如果一个 icon 占满整个宽度,则可以不用标注icon宽度尺寸,只需要标注距离边框的尺寸,开发会采用自适应,如果确定宽度,在有的屏幕上只能占据一半宽度,如果包的大小太大时,尽量保证更高尺寸的图片存在,这样低屏幕密度的手机也能展现很清晰的图片,但是如果只有小图,就会放大拉伸,会导致图片变形或者不清晰。

2025-03-07 09:59:36 569 1

原创 反编译 APK

只是需要 app 中的图片资源,可以直接修改 xxx.apk的后缀为 xxx.zip,解压即可。apktool:执行 apktool d xxx.apk 命令。

2025-02-17 14:26:14 281

原创 View 绘制流程

View 触摸机制(事件分发)View 绘制流程

2024-10-30 17:46:39 636

原创 View 触摸机制(事件分发)

主要由三个重要的方法共同完成的,只有ViewGroup有拦截方法。View事件方法执行顺序:onTouchListener > onTouchEvent > onLongClickListener > onClickListener。传递过程:Activity->Window->PhoneWindow->DecorView->RootView->ViewGroup->View。Input事件:触摸事件(Down、Up、Move);Key 事件(Home Key 、 Back Key)

2024-10-30 17:42:28 1127

原创 可以尝试的知识付费渠道

课程国内慕课网腾讯课堂网易云课堂中国大学MOOC网易公开课国外edXCourseraUdacity知识付费知乎 live小报童知识星球小专栏GitChat极客时间拉钩教育小鹅通千聊得到电子书Kindle电子书微信读书攀登读书会得到当当豆瓣

2024-05-02 15:23:59 179

原创 了解行业信息的网站

讨论脉脉看准网GlassdoorBlind一亩三分地社区薪资状况OfferCome100offer职级对标levels.fyi融资创投平台IT桔子烯牛数据瞪羚云风潮|Current.VC胡润百富榜单系列福布斯榜单查公司国家企业信息公示系统天眼查企查查查人中国裁判文书网中国执行信息公开网中国人民银行征信中心

2024-05-02 15:21:22 130

原创 Android 开发细分方向

应用开发自定义控件性能优化游戏开发日常开发引擎开发系统开发定制鸿蒙安全逆向基础框架:缓存 网络 数据库 日志动态化H5 容器React NativeFlutter组件化热修复 插件化音视频图形图像直播 会议嵌入式开发物联网车机AI大模型机器学习区块链AR & VR

2024-04-08 15:14:12 297 4

原创 RecyclerView 与 ListView(二):缓存

ListView和RecyclerView最大的区别在于数据源改变时的缓存的处理逻辑,ListView是"一锅端",将所有的mActiveViews都移入了二级缓存mScrapViews,而RecyclerView则是更加灵活地对每个View修改标志位,区分是否重新bindView。在Recycler中实际上缓存VieHolder的有2类集合,一类是可见的ViewHolder数组,一类是不可见的ViewHolder数组,其中可见的数组中又分为数据改变跟没有改变的。RecyclerView获取缓存的流程。

2024-04-05 16:42:43 1046

原创 RecyclerView 与 ListView(一):使用

通过ListView的getChildAt()来获得需要更新的View,然后通过getTag()获得ViewHolder,从而实现更新。RecyclerView.ItemDecoration 给每一项Item视图添加子View,例如可以进行画分隔线之类。RecyclerView.LayoutManager 负责Item视图的布局的显示管理。RecyclerView.ViewHolder 承载Item视图的子布局。RecyclerView.Adapter 为每一项Item创建视图。Recycler缓存机制。

2024-04-05 16:35:48 448

原创 开发环境搭建(二):IDE 配置

安装Genymotion与Genymotion插件之后,并与之关联。如需安装SVN,在安装SVN时需要勾选安装命令工具。修改注释位置,禁用“语句堆一行”修改文件编码为UTF-8。禁止自动打开上次的工程。

2020-04-13 20:44:40 442

原创 Android 子线程更新UI方法总结

【代码】android 子线程更新UI方法总结。

2019-03-06 20:39:40 486 1

原创 realm-js chrome debug 报错解决方案

failed to execute ‘send’ on ‘xmlhttprequest’方案一:修改node_modules/realm/lib/browser/rpc.jsif (global.__debug__) { let request = global.__debug__.require('sync-request'); let response = request(...

2019-01-24 13:24:43 724 1

原创 Android 编译版本、support、主题版本那些事

compileSdkVersion, minSdkVersion , targetSdkVersioncompileSdkVersion:编译版本,控制可以使用哪些 API 。不会被包含到 APK 中minSdkVersion :最低兼容版本targetSdkVersion:应用运行时使用的版本,即使使用了高版本API也不会生效合理的关系 minSdkVersion &lt;= targ...

2018-09-29 16:49:04 1466

原创 Android .so 文件使用

Android 上 启动 每个 App, 都会 为 App 创建 一个 虚拟 机。Android 的 64 位 系统,加载 32 位 的 so 或者 App 时, 会在 创建 一个 64 位 的 虚拟 机 的 同时, 还 创建 一个 32 位 的 虚拟 机, 这样, 就能 兼容 32 位 的 App 应用 了。所以, 在 App 中, 保留 一个 armeabi- v7a 版本 的 so 就 足够 了。64 位 Android 系统 会在 32 位 的 虚拟 机上 加载 它。

2018-09-25 17:07:27 2457 1

原创 ImageView的scaleType属性

ImageView的scaleTypematrix:matrix表示原图从ImageView的左上角开始绘制,如果原图大于ImageView,那么多余的部分则剪裁掉,如果原图小于ImageView,那么对原图不做任何处理fitXY:填充整个ImageView,不会按照原图的比例来缩放fitStart:将图片按比例缩放至View的宽度或者高度(取宽和高的最小值),然后居上或者居左显示fi...

2018-08-07 13:02:55 482

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除