获得徽章 5
搞不清楚也可以不要乱说。 #人工智能迷惑行为大赏#
所以,你们觉得 Glide、OkHttp 的业务价值体现在什么地方?
#每天一个知识点# 线程池的好处是减少线程创建和销毁上所花费的时间及系统资源的开销,解决资源不足的问题。在 Android 开发中同样也会经常使用到线程池。主要利用 Executors工厂类提供的方法:
● newCachedThreadPool: 只有非核心线程,最大线程数非常大,如果线程池中的线程都活动时,有新任务会创建新线程,否则会利用空闲线程,线程空闲时间为60秒,超过60秒会被回收。
适合大量的耗时少的任务。
● newFlxedThreadPool: 只有核心线程,并且数量固定,队列没有限制,如果线程池中的所有线程都活动时,新任务加入队列等待执行,空闲线程不回被释放,还会占用一定的系统资源。
更快的相应外界请求。
● newScheduledThreadPool: 核心线程数固定,非核心线程没有限制,空闲时会直接被回收。
适合执行定时任务及固定周期的重复任务
● newSingleThreadExecutor: 只有一个核心线程,确保所有任务都在同一线程中按顺序完成。
#每天一个知识点# Android 事件分发的顺序:Activity -> ViewGroup -> View。主要涉及到 dispatchTouchEvent() 、onInterceptTouchEvent() 和 onTouchEvent()三种接口来实现。
dispatchTouchEvent 方法分为两部分:子 View 的 dispatchTouchEvent 或 onTouch方法和自身的 onTouchEvent 方法。onInterceptTouchEvent() 方法返回 true,则会将事件拦截掉,就给自身的 onTouchEvent处理。如果返回 false,则继续传递给 child 执行分发流程。onTouchEvent 该方法主要对事件进行处理,若返回 true 表示已经处理了事件,若返回 false 则表示没有对事件进行处理,需要继续传递事件。一般情况下,默认为 false。
#每天一个知识点# Python 中的类型转换方法:字符串类型转换通过 str() 函数可以将一个变量转换为字符串类型。
● int(x) 将x转换为一个整数。
● float(x) 将x转换到一个浮点数。
● complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
● complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。
● str(x) 将对象 x 转换为字符串。
#每天一个知识点# Gradle Kotlin DSL 的使用,Gradle Groovy DSL 的后缀名是 .gradle。Gradle Kotlin DSL 的后缀名是 .gradle.kts。
gradle有3类配置脚本,每一类的配置脚本都会对应一个领域模型,如下:
● init.gradle.kts Gradle
● build.gradle.kts Project
● settings.gradle.kts Settings
#每天一个知识点# Android 的签名方案,发展到现在,已经支持三种应用签名方案:
● v1 方案:基于 JAR 签名。
● v2 方案:APK 签名方案 v2,在 Android 7.0 引入。
● v3 方案:APK 签名方案 v3,在 Android 9.0 引入。
#每天一个知识点# 线程共享区:方法区、堆
线程私有区:虚拟机栈、本地方法栈、程序计数器
● 方法区:用于存储class二进制文件,包含了虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
● 堆:存放引用类型的对象,即new出来的对象、数组值、类的非静态成员变量值(基本数据类型)、非静态成员变量引用。
● 虚拟机栈:为即时调用的方法开辟空间,存储局部变量值(基本数据类型),局部变量引用。
● 本地方法栈:为虚拟机执行 native 方法。
● 程序计数器:是一块较小的内存空间,可以看作当前线程所执行的字节码的行号指示器。
#每天一个知识点# SystemServer 进程启动过程做了以下工作:
预处理加载类和资源;
启动Binder线程池,与其他进程进行通信;
启动三类系统服务:boot 服务,core 服务,other 服务;
创建主线程Loope并进入循环等待消息。
下一页