首页
AI Coding
数据标注
NEW
沸点
课程
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
我
订阅
caz
更多收藏集
微信扫码分享
微信
新浪微博
QQ
13篇文章 · 0订阅
Android系统服务是如何获取的
在实际开发中,当我们需要编写提供某一业务流程处理的Manager,通常会实现为单例。那么上面那行代码背后发生了什么,为什么Android不使用单例模式呢?下面我们观察Android是如何设计获取系统服务的,它如何从应用侧到达系统侧。 可以思考一下,不在每个服务中单独使用单例的原…
[译] 为什么Kotlin协程的异常处理这么难?到底要如何掌握它?
本文通过代码示例,得到了6个协程异常处理相关的要点。需要指出的是,其中的异常处理中多次出现了单词"re-thrown",表示的是函数中出现了异常,通过调用栈向上抛出,即我们在不使用协程时Kotlin异常的传播方式。区别于Kotlin协程的结构化并发中沿着Job层次结构向上传播异…
LeakCanary检测内存泄露原理
以LeakCanary2.6源码分析LeakCanary检测内存泄露原理,为减少篇幅长度,突出关键点,不粘贴大量源码,阅读时需搭配源码食用。 LeakCanary只需引入依赖,不需要初始化代码,就能执行内存泄漏检测了,它是通过ContentProvider获取应用的contex…
为什么Fragment中要使用viewLifecycleOwner代替this
从类型上说,Fragment与viewLifecycleOwner的类型FragmentViewLifecycleOwner二者都继承了LifecycleOwner,向之前那样直接使用this,大部分情况下运行也是完全正常的。那么这里的Lint提醒是为什么呢? 可见这是有意为之…
尝试自己实现Android View布局流程
Android View的布局以ViewRootImpl为起点,开启整个View树的布局过程,而布局过程本身分为测量(measure)和布局(layout)两个部分,以View树本身的层次结构递归布局,确定View在界面中的位置。 下面尝试通过最少的代码,自己实现这套机制,注意…
从应用侧分析Activity启动流程与生命周期
我们知道,ActivityManagerService是Activity的管理者,处于系统进程中,以Binder机制与应用侧通信。可是为什么要有这个Manager呢?这是因为对于Android系统来说,APP中界面的直接体现者Activity,在整个APP的构成中,Activi…
Kotlin闭包
闭包(Closure)的概念总是存在于各种支持函数式编程的语言中。首先理解什么是闭包,这里取JavaScript文档中对闭包的定义: 函数在Kotlin中主要包括三种形式:普通的具名函数,匿名函数,lambda表达式。周围环境应该如何理解呢,可以理解为函数所处的外部作用域中定义…
深入理解Kotlin扩展函数
Kotlin中要扩展一个类的功能,除了使用继承(直接继承或继承一个接口使用委托)外,更便捷的方式是为该类定义扩展函数或扩展属性。此时称该类为接收者(Receiver),通常我们会把扩展(Extension)定义为顶层的,以便于在各处使用。 当使用一个变量引用该扩展函数,通过ID…
回调,观察者模式与总线
在Android开发中,回调无处不在,我们用它进行类与类的通信,并组成其他设计模式。Android系统API中也提供给了我们大量回调函数,用于类的定制,生命周期的监听,用户输入事件的通知等。对于这些系统回调,如果是单函数接口(SAM),我们还会写成lambda表达式的形式。 V…
Java线程池是如何运行的
异步编程工具在Android开发中目前最被推荐的就是Kotlin协程,在引入Kotlin协程机制前,除了响应式扩展(RxJava)兼任异步编程工具外,Java API中线程与线程池就是最重要异步编程手段。而对于Android平台的Kotlin协程实现来说,依然使用的是线程池来作…