使用Git Submodule减少Gradle构建配置模板代码
在使用Gradle配置的项目中,利用Gradle Composite Build实现约定插件管理配置,能减少Gradle配置模板代码。在使用的时候只需apply对应的plugin id即可。
在使用Gradle配置的项目中,利用Gradle Composite Build实现约定插件管理配置,能减少Gradle配置模板代码。在使用的时候只需apply对应的plugin id即可。
想要在Github的首页展现出其活跃度,语言熟练度等信息时,我们会需要使用工具api统计相关的信息。但是通常我们都会有一些生成的文件,并且生成的文件都很大,这很大程度影响了统计的准确性,想要让统计过滤掉这些文件,我们需要使用到`Linguist`。
TCP协议在面试过程中被提问频率也是很高的,但每次被问也都只能粗略几句话便说完,本文则是为了记录和巩固下对TCP协议中3次握手过程的理解...
现在移动端跨平台技术慢慢成熟,而Kotlin的KMM解决方案则在双端UI上实现都是原生,而共享业务逻辑代码,流畅度无疑是最接近原生的。本文主要是对自学KMM项目的一次总结和问题记录...
移动应用开发中,本地文件存储基本都会被用到,作为一个Android开发者,在KMM项目中遇到发现读取文件时拿到空结果,但是通过验证文件确实是存在的。通过一番努力之后,也算发现问题原因并解决了。写下本文记录简单的过程。
在Compose中,UI界面组件是通过重组更新UI,而重组则是重新执行Composable函数来实现,与其对应的是跳过重组来避免Compsable函数执行从而达到性能上提升。所以如果我们在某一个界面持有一个比较大的状态,状态的任意属性的改动都将引起整个界面重组,因此在必要的情况下我们可以拆分状态来减少重组域,提升性能...
在学习Jetpack Compose的时候,重组作用域这个概念是很重要的,了解它能够让你写出性能更好的代码。本文将介绍如何确认重组作用域。
在Jetpack Compose 代码中,我们经常看到LaunchedEffect
这个常见的。今天就简单了解下这个方法吧。在说LaunchedEffect
前,让我们先说一下Side Effect
.
在编程语言中,Side-Effect
指的是调用函数时,除了返回可能的函数值外,该函数还对函数范围外的变量,参数等进行了修改。
举个🌰,看下面的函数,它有2个参数,返回它们的和,但是没有对任何其他变量有修改,所以它是没有副作用(No Side-Effect)的
fun sum(number1: Int, number2: Int) = number1 + number2
但如果我们将函数修改成下面的实现,每次调用该函数都会对sum重新赋值,而sum又是在函数范围外,所以认为这个函数有一个副作用
var sum = 0
fun sum(number1: Int, number2: Int) {
sum = number1 + number2
}
根据源码我们看到,LaunchedEffect
是一个带有@Composable
的函数,注释如下
Android 跨进程通信的方式一般有:
- Binder
- 内存共享
- Socket
其中Binder在Android中使用比较多,比如AMS
在Android上,一个进程通常是不能获取到其他进程的内存访问权限的,但是有时我们需要在多个进程之间进行数据处理,因此Android提供了Android Interface Definition Language(AIDL)来做处理
其实AIDL是文件会通过编译生成一个Sub类并实现IBinder接口的,这种方式可以说是基于Binder实现的。
首先创建一个项目,有两个Phone Module,分别为Client和Server端。对于新的项目打开aidl feature支持
buildFeatures {
compose true
aidl true
}
因为将项目从Retrofit切换到Ktor和gson切换到kotlinx serialize。而kotlinx serialize和gson的实现差异导致在rpc接口中对于rpc 请求参数类型不一致的情况下,序列化出现了异常报错,比如类似一下的请求Body
{
"id": 0,
"jsonrpc": "2.0",
"method": "eth_call",
"params": [
{
"data": "0x5ec88c7900000000000000000000000081080a7e991bcdddba8c2302a70f45d6bd369ab5",
"from": "0x81080a7e991bcDdDBA8C2302A70f45d6Bd369Ab5",
"to": "0xb3831584acb95ED9cCb0C11f677B5AD01DeaeEc0"
},
"latest"
]
}
List<Any>
+ @Contextual本来以为在Kotlinx Serialize上会像Gson一样轻松解决,一开始便对于原来的数据结构定义成