
Android进阶
文章平均质量分 92
android 进阶
别偷我的猪_09
人间处处是繁华,你要全赴努力开花。
展开
-
Android---Gradle 构建问题解析
介绍了 gradle 构建中的 Task 和 project。Task 与大部分开发者的开发是最为紧密的,是 gradle 构建的基本单元。每次编译工程时,Android studio 会在控制台打印出执行的 task 名称。project 对应项目中的 module,每个 module 中包含一个 build.gradle。每个 build.gradle 都会被 gradle 编译成 Project 字节码。在 build.gradle 中所写的所有逻辑,最终都会被映射成此 Project 字节码原创 2023-11-16 20:53:38 · 526 阅读 · 0 评论 -
Android---网络编程优化
DNS 解析优化,分安全性和速度提升两方面。对于请求返回的数据需要缓存到本地数据库中。“发送埋点”的请求失败就将其保存到本地数据库中,当 App 重启或者重新接收到连接网络时,重新尝试发送之前失败的请求。幂等性在网络架构设计中是一个比较重要的原则。原创 2023-11-16 20:48:35 · 443 阅读 · 0 评论 -
Android---动态权限适配问题
本次主要介绍了 Android 系统中申请权限相关的知识点,主要是针对 Android 版本 23 之后的动态申请做了详细介绍。需要掌握的方法:1)checkSelfPermission 检查某权限是否已经申请;2)requestPermissions 主动发送申请权限的请求;3)shouldShowRequestPermissionRationale 判断用户之前对申请权限做出的相应动作。原创 2023-11-12 15:37:44 · 867 阅读 · 0 评论 -
Android---内存泄漏的优化
本次主要介绍了 Android 内存泄漏优化的相关知识。1)内存泄漏预防。这需要了解 JVM 发生内存泄漏的原因,并在平时开发阶段养成良好的编码规范。针对编码规范 Android Studio 可以安装又给阿里代码规范的插件,能够起到一定的代码检查效果。2)内存泄漏检测。内存泄漏检测工具有很多 Android Stuido 自带的 Profiler,以及 MAT 都是不错的选择。使用这些工具排查内存泄漏门槛稍高,并且全部是手动操作,略显麻烦。原创 2023-11-11 16:41:05 · 562 阅读 · 0 评论 -
Android---App 崩溃
本次主要介绍了 Android 崩溃的相关知识。对于 Android 工程师来说,crash 可以分为2层:Java 层和 Native 层。Java 层一般通过自定义 UncaughtExceptionHandler 进行异常拦截。Native 层可以考虑集成谷歌的 breakpad 进行捕获,并保存日志在本地。最后介绍了几个线上捕获 crash 的工具:Bugly、XCrash 和 Sentry。原创 2023-11-10 22:27:53 · 860 阅读 · 0 评论 -
Android---屏幕适配的处理技巧
本次主要介绍了几个 Android 屏幕适配的技巧,主要包含:使用 ConstraintLayout 能够完美实现布局内部控件之间的约束条件,并且能够;LinearLayout 和 RelativeLayout 等布局;在 ConstraintLayout 基础上,再加上多 dimens 适配方案基本就能实现所有的屏幕适配;对于特殊 UI 控件的适配再做针对性适配,主要介绍了 TextView 和 ImageView d 几个适配技巧。原创 2023-11-10 22:26:17 · 758 阅读 · 0 评论 -
Android---MVP 中 presenter 声明周期的管理
对 MVP 架构中 Presenter 层的使用做了2点优化介绍:1)如何支持 Presenter 的生命周期,使其在 Activity 被销毁时也能取消相应的耗时请求。2)合理使用 Presenter 的生命周期,Activity 中所有的方法都委托给 Presenter 来处理是不合理的。这样会造成 Presenter 层极其庞大,也难以维护,有时也会违反职责单一原则。原创 2023-11-11 12:17:32 · 730 阅读 · 0 评论 -
Android---彻底掌握 Handler
Handler 现在几乎是 Android 面试的必问知识点,大多数 Adnroid 工程师都在项目中使用过 Handler。主要场景是子线程完成耗时操作的过程中,通过 Handler 向主线程发送消息 Message,用来刷新 UI 界面。原创 2023-11-05 15:41:32 · 454 阅读 · 0 评论 -
Android---App 的安装过程
主要介绍了一个 Android 项目从编译成 apk 文件,然后被安装到手机设备上的简要过程。编译分为:资源 + 源代码。生成 apk 之后还要经过签名、对齐等操作;apk 安装分2块进行:安装包拷贝和代码装载原创 2023-11-05 15:39:04 · 720 阅读 · 0 评论 -
Android---如何同view进行渲染
主要介绍了 ViewRootImpl 是如何执行 View 的渲染操作的。其中核心方performTraversals 方法中会按顺序执行 measure->layout->draw 操作。介绍了软件绘制和硬件绘制的区别;介绍了 View 刷新的两种方式 Invalidate 和 postInvalidate。原创 2023-10-30 22:26:26 · 452 阅读 · 0 评论 -
Android---底层剖析 Window、Activity、View 三者关系
通过setContentView的流程,分析了Activity. Window. View 之间的关系。整个过程Activity表面上参与度比较低,大部分View的添加操作都被封装到Window中实现。Activity能够更简单的实现Window和View的操作逻辑。原创 2023-10-30 14:41:48 · 1075 阅读 · 0 评论 -
Android---StartActivity启动过程
文本详细介绍了 Activity 的启动在源码中的实现流程。这一过程主要涉及 3 个进程间的通信过程:进程 A 通过 Binder 调用 AMS 的 startActivity 方法;AMS 通过一系列的计算构造目标 Intent,然后在 ActivityStack 与 ActivityStackSupervisor 中处理 Task 和 Activity 的入栈操作;AMS 通过 Binder 机制,调用目标进程中 ApplicationThread 的方法来创建并执行 Activity 生命周期方法。原创 2023-10-27 21:47:38 · 1690 阅读 · 0 评论 -
Android---Bitmap详解
Bitmap开发中的几个常见问题:一张图片被加载成Bitmap后实际占用内存是多大;通过Options.inBitmap可以实现Bitmap的复用,但是有一定的限制;当界面需要展示多张图片,尤其是在列表视图中,可以考虑使用Bitmap缓存;如果需要展示的图片过大,可以考虑使用分片加载的策略。原创 2023-10-27 20:35:42 · 1511 阅读 · 0 评论 -
Android---OkHttp详解
OkHttp 内部是一个门户模式,所有的下发工作都是通过一个门户 Dispatcher 来进行分发。在网络请求阶段通过责任链模式,链式的调用各个拦截器的 intercept 方法。重点介绍了2个比较重要的拦截器:CacheInterceptor 和 CallServerInterceptor。它们分别用来做请求缓存和执行网络请求操作。在理解源码实现的基础上,对 OkHttp 的功能进行了一些扩展,实现了网络请求进度的实现。原创 2023-10-21 20:26:00 · 3363 阅读 · 0 评论 -
Android---RecyclerView替代ListView
深入分析了Android RecyclerView源码中的2块核心实现: RecyclerView是如何经过测量、布局,最终绘制到屏幕上其中大部分工作是通过委托给LayoutManager来实现的。RecyclerView的缓存复用机制,主要是通过内部类Recycler来实现。原创 2023-10-21 11:33:25 · 692 阅读 · 0 评论 -
Android---自定义View
介绍了自定义View的几个知识点,要自定义一个控件主要包含几个方法: onDraw:主要负责绘制UI元素;onMeasure: 主要负责测量自定义控件具体显示的宽高;onLayout: 主要是在自定义ViewGroup中复写,并实现子View的显示位置并在其中介绍了自定义属性的使用方法.原创 2023-10-17 21:38:51 · 818 阅读 · 0 评论 -
Android---touch 事件分发
重点分析了 dispatchTouchEvent 事件的流程机制:判断是否需要拦截 --> 主要是根据 onInterceptTouchEvent 方法的返回值来决定是否拦截。在 DOWN 事件中将 touch 事件分发给子 View --> 这一过程如果有子 View 捕获消费了 touch 事件,会对 mFirstTouchTarget 进行赋值;DOWN、MOVE、UP事件都会根据 mFirstTouchTarget 是否为 null 决定是自己处理 touch 事件,还是再次分发给原创 2023-10-17 09:14:11 · 282 阅读 · 0 评论 -
Android---Android 是如何通过 Activity 进行交互的
使用startActivity时可能会遇到的问题:taskAffinity 实现任务栈的调配;通过Binder传递数据的限制;多进程应用可能会造成的问题; 后台启动Activity的限制。原创 2023-10-15 13:26:04 · 1966 阅读 · 0 评论 -
Android---DVM以及ART对JVM进行优化
Dalvik 是 Google 公司自己设计用于 Android 平台的 Java 虚拟机,Android 工程师编写的 Java\Kotlin 代码最终都是在这台虚拟机中执行的。Android 5.0 之后改为 ART(Android Runtime)。Android 是把所有 Class 文件进行合并优化,然后生成一个最终的 class.dex 文件。Android 系统中的第一个 Dalvik 虚拟机是由 Zygote 进程创建的,而应用程序进程是由 Zygote 进程 fork 出来的。原创 2023-10-15 09:39:20 · 708 阅读 · 0 评论 -
Android---深入理解AQS和CAS原理
AQS是一套框架,在框架内部已经封装好了大部分同步需要的逻辑。在AQS内部维护了一个状态指示器state和一个等待队列Node。AQS有两种不同的实现: 独占锁(ReentrantLock等),分享锁(CountDownLatch、 读写锁等)。本次主要从独占锁的角度深入分析了AQS的加锁和释放锁的流程。原创 2023-10-13 11:58:28 · 421 阅读 · 0 评论 -
Android---java线程优化 偏向锁、轻量级锁和重量级锁
偏向锁和轻量级锁是通过自旋等技术避免真正的加锁;重量级锁是获取锁和释放锁;重量级锁通过对象内部的监视器(ObjectMonitor) 实现,其本质是依赖于底层操作系统的Mutex Lock实现,操作系统实现线程之间的切换需要从用户态到内核态的切换,成本非常高。原创 2023-10-13 09:07:20 · 426 阅读 · 0 评论 -
Android---Synchronized 和 ReentrantLock
Java中两个实现同步的方式synchronized和ReentrantLock。synchronized使用更简单,加锁和释放锁都是由虚拟机自动完成。ReentrantLock需要开发者手动去完成,很Reentrantl ock的使用场景更多公平锁和读写锁都可以在复杂场景中发挥重要作用。原创 2023-10-11 21:30:39 · 1411 阅读 · 0 评论 -
Android---java内存模型与线程
Java 内存模型的来源:主要是因为 CPU 缓存和指令重排等优化操作造成多线程程序结果不可控。Java 内存模型是什么:本质上它就是一套规范,在这套规范中有一条最重要的 happens-before 原则。Java 内存模型的使用简单介绍了两种方式:volatile 和 synchronized。原创 2023-10-11 10:01:15 · 273 阅读 · 0 评论 -
Android---Class 对象在执行引擎中的初始化过程
装载:指查找字节流,并根据此字节流创建类的过程,装载过程成功的标志就是在方法区中成功创建了类所对应的 Class 对象。链接:指验证创建的类,并将其解析到 JVM 中使之能够被 JVM 执行。初始化:是将标记为 static 的字段进行赋值,并且执行 static 标记的代码语句。原创 2023-10-08 22:18:02 · 686 阅读 · 0 评论 -
Android---深入理解ClassLoader的加载机制
ClassLoader 是用来加载 class 文件的,不管是 jar 中还是 dex 中的 class;Java 中的 ClassLoader 通过双亲委托来加载各自指定路径下的 class 文件;可以自定义 ClassLoader,一般覆盖 findClass() 方法,不建议重写 loadClass 方法;Android 中常用的两个 ClassLoader 分别为:PathClassLoader 和 DexClassLoader。原创 2023-10-07 11:40:44 · 1270 阅读 · 0 评论 -
Android---字节码层面分析Class类文件
Java 提供了一种可以在所有平台上都能使用的一种中间代码---字节码文件(.class文件)。有了字节码,无论是那个平台只要安装了虚拟机都可以直接运行字节码文件。原创 2023-10-06 11:55:27 · 581 阅读 · 0 评论 -
Android---GC回收机制与分代回收策略
GC 回收机制垃圾就是内存中已经没有用的对象,JVM 中的垃圾回收器(Garbage Collector)会自动回收,Java 虚拟中使用“”算法来决定对象是否可以被回收。如下图:以 GC Root 作为起始点, 从这些节点开始向下搜索,所走过的路径称为引用链,最后通过判断对象的引用链是否可达来决定对象是否可以被回收。例如,上图中对象 A, B, C, D, E 与 GC Root 之间都存在一条直接或间接的引用链,这也代表他们与 GC Root 之间是可达的,因此它们是不能被 GC 回收掉的。原创 2023-10-04 16:54:10 · 1768 阅读 · 0 评论 -
运行时内存分配
运行时内存的分配原创 2023-09-26 13:15:48 · 236 阅读 · 0 评论