- 博客(57)
- 收藏
- 关注
原创 二次重温协程
Job是协程的句柄。如果把门和门把手比作协程和Job之间的关系,那么协程就是这扇门,Job就是门把手。意思就是可以通过Job实现对协程的控制和管理。Job我们可以认为他就是一个协程作业是通过生成的,同时它运行一个指定的代码块,并在该代码块完成时完成。我们可以通过isActive来获取到Job的当前状态。Deferred 继承了 Job 接口 , 是 Job 接口的子接口;机翻文档 , 仅供参考;/*** 定义协同程序构建器的开始选项。
2024-05-02 22:08:07 685
原创 函数的参数命名和默认参数
在Kotlin中,函数可以有多个参数,记住参数的顺序或者仅靠位置理解他们的作用可能会很具有挑战性,特别是对于接受多个参数或者有相同类型参数的函数。命名参数通过允许开发者指定传递给函数的每个参数的名称来解决这个问题。
2024-04-15 15:22:56 233
原创 安全调用(?.) Elvis运算符(?:)
安全调用运算符允许开发者在可能为空的对象上安全地访问属性或调用方法。如果对象不为空,操作就会被执行;如果对象为空,则跳过操作,并返回null而不是抛出NullPointerException。如果text不为null,那么length将被赋予text的长度;如果text为null,那么length也将为null,全部都不会报NullPointerException。
2024-04-15 14:47:32 382
原创 Android 内存优化&内存泄漏处理
匿名内部类的泄漏原因:匿名内部类会隐式地持有外部类的引用.当外部类被销毁时,内部类并不会自动销毁,因为内部类并不是外部类的成员变量,它们只是在外部类的作用域内创建的对象,所以内部类的销毁时机和外部类的销毁时机是不同的,所以会不会取决与对应对象是否存在被持有的引用.
2024-02-24 19:14:46 1122
原创 协议基础笔记
串口通信是Android智能硬件开发所必须具备的能力,市面上类型众多的外设基本都是通过串口进行数据传输的,所以说不会串口通信根本就做不了智能硬件开发。串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。串口可以在使用一根线(Tx)发送数据的同时用另一根线(Rx)接收数据。
2024-01-02 21:04:37 910
原创 Android 串口协议
CHKSUM : 是 校 验 .CHKSUM = 0 xor Packet[0] xor Packet[1] xor …而接受数据再发出回应数据包的通讯端点为从机(Slaver)(主控板) ,Slaver 发出的数据包被称为应答数据包。发送数据的通讯端点为主机(Master)(Android), Master 发出的数据包被称为请求命令数据包。Packet[N]表示即将发送的当前数据包的第 N 个字节去除 CHKSUM 字段的其他所有部分。请求命令数据包与应答数据包必须是成对出现,每个应答对应一个请求。
2024-01-02 21:04:27 621
原创 arkTS 基础知识
需要加 @Component export 关键字不需要加this. 调用放在类外(需要加@Builder function关键字) (每个组件都能调用)需要加this.调用封装:在Index2类里面(不能加function关键字) (当前这个组件自己都有的 别的组件不能调用)加关键字@Styles装饰器封装的全局公共样式函数(@Styles function)(封装在类外)或者局部公共样式函数(@Style)(封装在类里面)
2023-12-23 16:31:03 1110
原创 jni之as cmakeList配置学习
Java Native Interface(Java 本地编程接口),一套编程规范,它提供了若干的 API 实现了 Java 和其他语言的通信(主要是 C/C++)。Java 可以通过 JNI 调用本地的 C/C++ 代码,本地的 C/C++ 代码也可以调用 java 代码。native代表当前程序运行的本地环境,一般指windows/linux,而这些操作系统都是通过C/C++实现的,所以native通常也指C/C++语言,(也可在其他目录下创建,在第二点会配置这个路径);的名字修改 fmf_jni。
2023-10-18 22:10:50 249
原创 cmake下的abiFilters和ndk下的abiFilters的区别
ndk下的abiFilters是只将哪个类型so库打包进apk安装包里,和生成什么类型的so库没有关系。cmake下的abiFilters是和编译native代码生成什么类型的so库有关。
2023-10-09 17:07:49 286
原创 关于 ndk { abiFilters ‘arm64-v8a‘ } 与splits { abi { include “arm64-v8a“}}的互斥冲突
apk包,通知,从 2019 年 8 月 1 日开始,您在 Google Play 上发布的应用必须支持 64 位架构。64 位 CPU 能够为您的用户提供更快、更丰富的体验。
2023-10-08 15:08:55 832
原创 跟着官方学jni&ndk
Android Gradle 插件 4.2.0 及更高版本可在您首次构建项目时自动安装所需的 NDK 和 CMake,前提是您已预先接受其二者的许可。如需向 CMake 构建脚本添加库的多个 ABI 版本,而不必为库的每个版本编写多个命令,您可以使用。如果您的原生源代码文件还没有 CMake 构建脚本,您需要自行创建一个,并在其中包含适当的 CMake 命令。使用 Android Studio 3.6 或更高版本时,如果您不指定版本,Android Gradle 插件会选择已知兼容的版本。
2023-09-21 22:27:27 266
原创 NDK基础
Android.mk:在 Android 上编译需要的配置文件,相当于 build.gradle,详细细节后面会讲到。各个平台架构的区别就是指令集不一样,浮点运算能力不一样,按照上面排列的顺序,浮点运算能力运行从低到高。需要一一对应,如果没有一一对应,外部模块调用了接口,编译的时候会提示找不到方法。存在的意义,方便代码不用重复编译, 最终为了生成。库对外开放的接口声明。这句代码代表着,使用这个类之前都会去加载。合并到一块的集合,经常在编译。所以接下来我们要构建。为了减少包体大小只接入。
2023-09-20 16:00:46 573
原创 C语言指针详解 函数指针 指针函数
C语言中,定义变量时,在变量名 前 写一个 * 星号,这个变量就变成了对应变量类型的指针变量。必要时要加( ) 来避免优先级的问题。引申:C语言中,定义变量时,在定义的最前面写上typedef ,那么这个变量名就成了一种类型,即这个类型的同义词。
2023-09-13 18:34:53 124
原创 如何理解C++中的void*
1.void*是一个过渡型的指针状态,可以代表任意类型的指针,取值的时候需要转换为具体类型才能取值。其是处于数据类型顶端的状态:2.void* 使用赋值运算符“=”赋值时,只能将具体类型赋值给void星,不能将void*赋值给具体类型。3.void*一般作为参数或者返回值来实现泛型编程,但是C++中一般考虑使用模板编程来实现。
2023-09-08 15:41:30 670
原创 C++:this
this:它指向当前对象,通过它可以访问当前对象的所有成员。所谓当前对象,是指正在使用的对象。例如对于stu.show();,stu 就是当前对象,this 就指向 stu。this 只能用在类的内部,通过 this 可以访问类的所有成员,包括 private、protected、public 属性的。this: 是一个指针,要用->来访问成员变量或成员函数。this 虽然用在类的内部,但是只有在对象被创建以后才会给 this 赋值,并且这个赋值的过程是编译器自动完成的,不需要用户...
2022-01-13 11:03:46 373
原创 协程的异常处理 协程上下文 协程的异常捕获
一:协程上下文CoroutineContext协程CoroutineContext上下文组成公式 = 默认值 + 继承的CoroutineContext +参数默认值 = Dispatchers.Default+CoroutineName("coroutine")继承的CoroutineContext = CoroutineScope或者其父协程的上下文CoroutineContext参数 =...
2021-12-28 21:31:20 1233
原创 协程的取消 CPU密集型任务取消
一:协程的取消1.取消协程作用域CoroutineScope/coroutineScope会取消它里面的所有子协程 coroutineScope 与 CoroutineScope 的区别 不同点: coroutineScope是协程的作用域构建器函数 参数需要传入一个匿名CoroutineScope对象 CoroutineScope的一个函数方法 CoroutineScope 自己创建了一个协程作用域对象相同点: 在里面都可以通过lanuch ...
2021-12-24 15:49:54 460
原创 RunBlocking CoroutineScope SupervisorScope Launch Async CoroutineStart协程启动模式 Job对象和生命周期
协程的作用域构建器 RunBlockingrunBlocking是常规函数,会把当前主线程包装成一个主协程,其会阻塞当前线程, 只有当等待其主协程体以及里面的所有子协程执行结束以后,才会让当前线程执行, CoroutineScopecoroutineScope是挂起函数,不会阻塞当前线程。public actual fun <T> runBlocking(context: CoroutineContext, block: suspend CoroutineSco...
2021-12-22 19:03:43 543
原创 Koin 框架
关键函数符号startKoinstartKoin 函数是启动koin框架的入口,传入一个定义在KoinApplication上的一个扩展lamda类型KoinAppDeclaration来配置koin。调用startKoin来启动koin,里面填注入对象. //开始启动koin startKoin { androidLogger(Level.ERROR)//目前已知bug,除了level.error外,使用androidlogger会导致崩溃
2021-12-16 21:43:28 1875
原创 协程 协程的挂起和恢复 协程调度器 协程的作用域CoroutineScope
协程:处理耗时任务,不阻塞主线程,保证主线程安全,同时还让耗时的异步任务同步化,杜绝回调地狱。协程就是让一个函数或者一段程序代码 挂起,稍后再在挂起的位置恢复协程的挂起和恢复suspend 挂起 暂停 暂停执行当前协程,并保存所有 的局部变量resume 恢复暂停的协程继续执行。挂起与阻塞挂起: 记住这个挂起点, 你可以去做其他的事情, 当这个挂起点 恢复执行了,就会通知你,你在执行这个事。 主线程遇到挂起点,不管它,主线程可以干别的事情 ,当这个挂起结束了,直接执...
2021-12-06 20:52:07 421
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人