一文搞懂 Kotlin 协程中的挂起与恢复 Android 协程的创建 先来看一个简单的示例代码: fun main() { /** * 创建协程 * 一个 suspend Lambda 可以通过 createCoroutine 方法创建一个协程 */ val continuation = suspend {
Android 常见面试题 1 如何优化安卓应用启动速度? 延迟非关键初始化(首帧后) 避免主线程 I/O 轻量首屏布局,避免嵌套布局 图片与数据懒加载 安卓中常见的调试方式有哪些? 1)最基本的是 Logcat + 断点调试; 2)界面问题用 Layout Inspector / GPU Overdraw; 3)性能问题用
Kotlin 常见面试题 Android val 和 const 在 Kotlin 中 val 修饰的变量并不是常量,而是“只读变量”。所谓只读,指的是它只能被 赋值一次,但并不保证它的值在运行时不可变。 在 Kotlin 中,一个类的成员变量通常由 backing field + getter + setter 组成: var:有 get
Java 中并发安全的容器 Collections.synchronizedList Collections 工具类提供一个 synchronizedList 方法,把一个 List 实例装饰成线程安全的。实际上返回的是 Collections.SynchronizedList 内部类,它持有一个原始 List 的引用,并在所
探索 RecyclerView 的原理 Android RecyclerView 中的核心组件 RecyclerView:承载整个列表,处理触摸交互、边界判断,并协调 Recycler(回收器)与 Adapter(适配器)之间的工作。 LayoutManager:负责子 View 的测量与布局,决定何时回收 View。它通过 getViewForPosi
Java 常见面试题 Java Java 内存模型 Java 的内存模型结构 运行时常量池 JVM 在类加载完成后,会把字节码文件中的常量池信息加载到运行时常量池(Runtime Constant Pool)中。每个类或接口
计算机网络常见面试题 八股面试 TCP 的流量控制 所谓流量控制就是:让发送方的发送速率不要太快,要让接收方来得及接收。 TCP 是利用滑动窗口实现流量控制: 接收端维护一个接收缓冲区; 每接收到一段数据,缓存占用增加; 每被应用程序读取一部分数据,缓存占用减少; 每发送一个 ACK,都包含当前可用的窗口大小 rwnd。 特殊情况
浅谈 Android 中的跨进程通讯 Android 一、为什么 Android 使用 Binder? Android 系统出于安全性和稳定性的考虑,为每个应用分配独立的进程和虚拟机实例。这样做的好处是,即使某个应用崩溃,也不会直接影响到其他应用或系统本身。但随之而来的问题是:不同进程间内存空间隔离,数据无法直接共享。 然而,跨进程通信又是必不可少的。
Activity 生命周期与启动模式 Android Activity 是 Android 四大组件之一,承担着用户界面交互的核心职责。由于移动端应用涉及前后台切换、旋转、内存回收、任务栈管理等复杂情况,理解 Activity 的生命周期对于开发健壮的应用至关重要。 一、Activity 生命周期回调函数 一个 Activity 从创建到销毁,大致会经
浅谈 Java 中的锁升级 Java Java 在并发场景下,为了兼顾性能与安全,引入了锁升级机制。同一把锁会根据竞争情况,从低开销状态逐步升级到高开销状态,以减少无意义的阻塞与线程切换。 Java 对象的锁标志是存储在对象头中的 Mark Word (在 64 位虚拟机中长度是 64 位)中的: 倒数第3位:表示该对象是否可偏向; 倒