0%

构造函数

主构造函数

在Kotlin中的一个类可以有一个主构造函数以及一个或多个次构造函数。主构造函数是类头的一部分:它跟在类名(与可选的类型参数)后。

1
class Person constructor(firstName: String) { /*……*/ }
阅读全文 »

参数和返回值

函数参数可以有默认值,当省略相应的参数时使用默认值。与其他语言相比,这可以减少重载数量:

1
fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size) { /*……*/ }
阅读全文 »

异常崩溃原因

在 Zygote 进程 fork 出 App 进程后,会调用 zygoteInit 方法,其中会执行 ActivityThread.main() 方法,在此之前会通过 Thread.setDefaultUncaughtExceptionHandler 方法设置 App 的默认异常处理器(打印异常,并终止进程)。

阅读全文 »

概述

Android App 的每个进程有一个最大内存限制,如果申请的内存资源(只有Java heap受这个限制, Native heap 不受限制)超过这个限制,系统就会抛出 OOM 错误。Java heap 占用过多整体来说可以分为两类:

  • 大内存对象,如 Bitmap 等。
  • 内存泄漏。

内存优化参考 Android性能优化之内存优化

阅读全文 »

概述

AMS 和 WMS 会检测App的响应时间,如果App在特定时间无法响应屏幕触摸或键盘输入时间,或者特定事件(生命周期等)没有处理完毕,就会出现 ANR(Application Not Responding)。

ANR 一般有以下几种类型:

  • KeyDispatchTimeout: input 事件在 5s 内没有处理完成, logcat 关键字: Input dispatching timed out
  • BroadcastTimeout: 前台广播 onReceiver 在 10S 内没有处理完成,后台广播 onReceiver 在 60s 内没有处理完成, logcat 关键字: Timeout of broadcast BroadcastRecord
  • ServiceTimeout: 前台服务 onCreate, onStart, onBind 等生命周期在20s内没有处理完成,后台服务 onCreate, onStart, onBind 等生命周期在 200s 内没有处理完成, logcat 关键字: Timeout executing service
  • ContentProviderTimeout: ContentProvider 在 10s 内没有处理完成, logcat 关键字: timeout publishing content providers
阅读全文 »

概述

Jetpack Compose 是一个用于构建原生 Android UI 的工具包,它基于声明式的编程模型,因此可以简单地描述 UI 的外观,而 Compose 则负责其余的工作。当状态发生改变时,UI 将自动更新。由于 Compose 基于 Kotlin 构建,因此可以与 Java 互操作,并且可以直接访问所有 Android 和 Jetpack API。它与现有的 UI 工具包也是完全兼容的,因此可以混合原来的 View 和现在新的 View,并且从一开始就使用 Material 和动画进行设计。

阅读全文 »

Canvas & Layer

Canvas的官方注释: To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, Path, text, Bitmap), and a paint (to describe the colors and styles for the drawing).

即当需要draw的时候,需要4个基本的组件:

  • 一个Bitmap来存储像素
  • 一个Canvas来接收draw的调用(draw的结果是将像素画到前面的Bitmap中)
  • 一个源,即想画的东西(比如矩形,路径,文本,或位图)
  • 一个画笔(描述想画的颜色和风格等)
阅读全文 »

概述

RecyclerView 作为替代 ListView 的组件,得益于 RecyclerView 的灵活性和可定制程度高的特性,除此之外 RecyclerView 的预取机制以及缓存机制也是一大亮点。相关类:

  • LayoutManager: 布局管理器,用来决定 View 如何填充 RecyclerView, 接管 RecyclerView 的 Measure, Layout, Draw 过程。
  • RecyclerView.Adapter: 负责提供 View 所需要的数据集以及管理 View 的创建和数据绑定。
  • ViewHolder: View 持有者,负责 View 的初始化。
  • Recycler: 缓存逻辑。
阅读全文 »