自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(226)
  • 收藏
  • 关注

原创 compose 布局间距设置

摘要:文章测试了Jetpack Compose中Row容器的Modifier调用顺序对布局效果的影响。实验表明,先调用background再调用padding会使背景色覆盖整个Row区域;反之则背景色仅作用于padding后的内容区域。点击事件测试进一步验证了Modifier链式调用的顺序敏感性:后调用的函数在前面的效果基础上生效。结论指出Modifier的每个函数都会基于之前调用的效果进行叠加,这种顺序依赖性会影响最终组件的显示和交互范围。

2026-03-15 20:16:57 35

原创 Android databinding

本文介绍了将MVVM示例改造为使用DataBinding的过程。首先在build.gradle.kts中启用dataBinding,然后在布局文件外层添加layout标签,使用data标签声明ViewModel变量。通过@{}语法实现单向数据绑定(数据变化自动更新UI)和点击事件绑定,简化了代码。接着尝试双向绑定时遇到类型转换问题,最终采用监听EditText文本变化回调ViewModel方法的方式实现。ViewModel中新增健康指数属性和处理方法,Activity中延迟修改数据测试绑定效果。改造后实现了

2026-03-15 11:38:00 202

原创 MVVM 架构demo

本文介绍了一个Android应用开发示例,主要实现了一个武侠人物属性管理界面。项目采用MVVM架构,核心功能包括: 使用ViewBinding简化视图绑定 实现WuxiaCharacterViewModel管理人物属性数据(魅力、武力、财富) 通过LiveData实现数据观察和UI自动更新 添加按钮交互逻辑调整属性值 包含生命周期观察组件记录Activity状态变化 界面布局采用ConstraintLayout,显示段正淳的人物属性及调节按钮。ViewModel层封装了业务逻辑,包括属性增减方法和财富格式化

2026-03-12 14:22:09 26

原创 测试go语言函数和结构体

本文展示了Go语言的两个特性:1) 函数多返回值的使用,通过下划线忽略不需要的返回值;2) 结构体的三种初始化方式(值类型、new指针、取地址指针)及其使用。代码示例包括一个返回整数和字符串的add函数,以及用不同方式创建Person结构体实例并打印其属性。测试结果均正常输出,验证了这些语法在Go中的正确使用方式。

2026-03-11 13:11:12 72

原创 React Native js代码调试

React Native调试指南:安装应用后,通过adb反向代理8081端口。在项目根目录启动Metro服务(npx react-native start)。摇动设备打开调试页面,点击Debug后App会重新加载,浏览器自动打开调试页面。按Ctrl+Shift+J打开控制台,在Sources选项卡中找到项目文件设置断点即可调试。注意该方法适用于较旧版本React Native,新版本调试方式可能不同。

2026-03-09 15:29:23 22

原创 go语言常用语法

本文展示了一个Go语言基础程序,包含变量声明、指针操作、数组和切片等核心语法。程序演示了字符串输出、变量交换、指针声明与解引用、数组遍历、切片创建等操作。其中包含了指针修改值、多重赋值、new关键字创建指针、make函数构造切片等实用技巧,并配有详细注释说明各语句功能。通过简单的代码示例,展现了Go语言简洁高效的特性,如短变量声明、多重赋值语法等。

2026-03-09 13:32:50 38

原创 android ARouter配置降级服务

本文介绍了如何实现ARouter路由失败时的统一降级处理方案。主要包括:1.在common模块的build.gradle.kts中添加ARouter依赖和注解处理器;2.自定义DegradeService实现类处理路由失败情况,记录日志并跳转到错误页面;3.创建错误页面Activity并配置路由注解;4.在主模块AndroidManifest中注册错误页面Activity。当路由失败时,系统会自动重定向到预设的错误页面,并显示失败的路由地址和错误信息。

2026-03-08 11:57:39 103

原创 Android ARouter通过路由获取fragment

本文演示了使用ARouter跨模块获取Fragment的实现方法。在module_user和module_2模块中分别创建带有@Route注解的Fragment(ModuleUserFragment1和Module2Fragment1),支持通过@Autowired接收参数。MainActivity通过ARouter.build()获取这两个Fragment实例,使用withString()方法传递参数,并将它们添加到布局中的FrameLayout容器显示。测试成功实现了跨模块Fragment的获取、参数传

2026-03-07 16:20:06 77

原创 Android ARouter拦截器

本文演示了如何使用ARouter拦截器实现登录验证功能。主要实现包括:1) 创建LoginActivity处理登录逻辑;2) 实现PersonalCenterActivity作为需要登录的页面;3) 编写LoggerInterceptor记录路由日志;4) 开发LoginInterceptor拦截未登录访问。当用户未登录时访问个人中心页面,拦截器会重定向到登录页面;登录成功后自动跳转回目标页面。通过@Interceptor注解和优先级设置,实现了日志记录和登录验证的有序执行,展示了ARouter拦截器在实现

2026-03-07 11:17:48 84

原创 git常用用法--多需求开发

本文介绍了在Git中同时开发多个需求的分支管理方法。首先通过git stash保存当前修改,创建干净的工作区。然后为每个需求创建独立分支(如feature/ui-fix、feature/upgrade-rn),基于最新代码进行开发。重点说明了如何将开发分支变基(rebase)到最新主分支,解决冲突后推送到Gerrit。最后强调在切换分支和重置代码前,必须确保所有修改都已stash或commit,避免数据丢失。这种方法可以保持代码整洁,实现多任务并行开发。

2026-03-03 20:31:21 250

原创 Android ARouter 跨模块调用接口

本文介绍了如何使用ARouter框架实现Android模块化开发中的跨模块接口调用。首先创建公共模块(common)定义接口和公共功能,然后建立业务模块(module_user)实现接口,最后在主模块(app)中通过ARouter调用业务模块的服务。关键步骤包括:1)在公共模块定义接口继承IProvider;2)在业务模块使用@Route注解实现接口;3)主模块通过ARouter.getInstance()获取服务实例并调用方法。这种方法实现了模块间的解耦,使各模块可独立开发和维护。

2026-03-01 20:28:11 340

原创 Android ARouter路由框架

本文演示了Android项目中ARouter路由框架的基本配置和使用。通过Gradle配置添加ARouter依赖和注解处理器,在自定义Application中初始化ARouter并开启调试模式。示例包含3个测试页面,使用@Route注解声明路由路径,通过ARouter.getInstance().build()实现页面跳转和参数传递(如字符串参数)。测试表明能正常实现页面跳转和参数传递功能,但作者认为其实际价值有限。项目采用Kotlin DSL构建脚本,AndroidX依赖,支持ViewBinding和Ja

2026-03-01 18:44:28 183

原创 kotlin 对象表达式和对象声明的区别

本文展示了Kotlin中两种对象创建方式:对象声明和对象表达式。对象声明(如SuperMan)创建单例对象,可以继承类和实现接口;对象表达式则用于创建匿名对象实例。代码示例演示了如何通过这两种方式创建Person类的实例,并调用其属性和方法。输出结果表明对象声明是单例模式,而对象表达式每次都会创建新实例。这两种方式为Kotlin提供了灵活的对象创建机制。

2026-02-27 12:47:17 119

原创 kotlin 高阶函数用法

本文展示了Kotlin中常用的高阶函数用法,包括filter过滤偶数、map转换元素、mapNotNull过滤无效转换、flatMap扁平化嵌套集合等。通过处理数字列表、字符串列表、用户对象集合等示例,演示了如何利用这些函数进行数据筛选、转换和聚合操作。还展示了takeWhile/dropWhile条件筛选和reduce计算总和/最大值的用法。这些高阶函数使集合操作更加简洁高效,体现了Kotlin函数式编程的灵活性。

2026-02-25 11:31:31 216

原创 kotlin with函数

摘要:测试Kotlin的with函数用法,该函数接收对象作为参数并在代码块中提供上下文引用。示例中创建Person对象并设置其属性name和age,最后返回字符串结果。调用testWith()函数将打印格式化后的字符串"zxzx, 刘华强:宋大哥,你混的早,孝敬你的人也多。",演示了with函数简化对象操作并返回最后一行结果的特性。

2026-02-24 15:56:37 240

原创 kotlin 作用域函数also

摘要:文章演示了Kotlin中also函数的用法,通过Person类实例展示其链式调用特性。also函数允许在对象初始化后执行额外操作,同时返回对象本身。示例中先设置对象属性,再打印特定语句,最后输出对话内容。虽然功能与apply函数相似,但also更强调执行额外操作而非配置对象属性。代码输出包含"刘华强"的自我介绍和经典台词对话。

2026-02-24 15:30:15 190

原创 kotlin 作用域函数run

本文演示了Kotlin中run函数的用法。通过Person类实例panJingLian调用run函数,在代码块内设置对象属性(name和age)并判断是否成年,最后返回布尔值。run函数以this为上下文对象,可省略引用,且返回代码块最后一行结果。示例输出显示对象属性设置成功,并根据年龄判断输出相应提示信息。运行结果验证了run函数的正确使用方式。

2026-02-24 14:23:26 288

原创 kotlin 作用域函数apply

摘要:本文展示了Kotlin中apply函数的用法,该函数允许在对象上下文中执行代码块并返回对象本身。示例中演示了字符串和自定义类的apply操作:对字符串进行大小写转换和拼接输出;对Person类对象进行属性初始化并打印。文章指出apply函数在Android开发中常用于Intent等对象的链式初始化,体现了Kotlin简洁的DSL风格。测试结果显示代码执行正常,验证了apply函数的实用性。

2026-02-24 13:42:42 174

原创 kotlin let函数

文章摘要:Kotlin的let函数结合?.操作符可实现对象非空时执行代码块,并为对象创建临时作用域。默认用it指代对象,也可自定义变量名。示例中,对可空字符串str调用?.let,先执行打印语句,再返回大写字符串,最后通过链式调用拼接"I LOVE U"。let函数支持流式调用,最后一个表达式作为返回值,使代码更简洁高效。

2026-02-24 11:33:32 166

原创 React Native Demo

本文展示了一个React Native应用Demo,实现了页面导航和原生模块交互功能。主要包含两个页面:首页(HomeScreen)和详情页(DetailScreen)。首页提供三个功能按钮:显示原生Toast、获取设备信息、跳转到详情页;详情页则实现了数据发送到原生模块处理、随机数求和计算等功能。原生模块(NativeDemoModule)封装了Toast显示、设备信息获取、数据处理和数学计算等方法,通过Promise与JS端进行异步通信。应用使用React Navigation实现页面导航,并展示了完整

2026-02-23 20:36:29 292

原创 kotlin Flow的用法2

摘要:测试Flow中生产者(200ms/条)与消费者(1000ms/条)速度不匹配时的背压处理。使用buffer(3)建立3元素缓冲池后,生产者可保持原速生产(共5条数据),而消费者按自身节奏处理;未使用buffer时,生产会受消费速度制约变为同步执行。实验验证了buffer()在异步流处理中的缓冲作用,以及冷流特性(消费驱动生产)。日志输出包含测试数据和《三国演义》赵云赞诗。

2026-02-23 17:26:22 247

原创 kotlin Flow的用法

摘要:本文演示了Kotlin协程中Flow异步数据流的基本用法。通过testFlow()函数测试了分页加载数据的流程:1)使用flow构建器创建数据流;2)通过fetchPage模拟网络请求;3)使用flowOn指定IO线程;4)通过collect收集数据并处理UI更新。代码展示了异常处理(catch)、数据发射(emit)和线程调度等核心功能,最终打印"ok"确认基本用法正确。该示例适用于需要异步处理数据流的场景。

2026-02-23 16:43:59 215

原创 kotlin Channel的用法

文章摘要:本文展示了Kotlin协程中Channel的使用方法。通过两个测试函数演示了协程间的通信机制:1)基础用法展示了协程间发送和接收数据的过程;2)生产者-消费者模式展示了如何通过Channel实现数据生产和消费的协作,包括使用close()关闭通道和处理异常。测试结果表明Channel能有效实现协程间的数据传递和同步控制。

2026-02-23 13:18:47 177

原创 kotlin 测试协程嵌套

本文演示了协程嵌套的执行流程。通过lifecycleScope启动父协程,在其中创建两个子协程并分别延迟1秒和2秒执行。使用parent.join()确保父协程等待所有子协程完成后才继续执行。日志输出显示:1)父协程启动;2)两个子协程并行执行;3)子协程按延迟时间先后完成;4)父协程最后完成。测试验证了join()能实现协程间的同步等待,且协程默认在同一线程(主线程)执行。代码末句为调试时的临时日志信息。

2026-02-23 11:23:43 210

原创 kotlin async异步协程构建器

摘要:本文演示了Kotlin协程中async异步构建器的使用。通过lifecycleScope启动两个并行任务(task1和task2),分别使用IO和Default调度器模拟网络请求(延迟2秒和3秒)。使用await()等待两个任务完成后合并结果。关键点包括:1) 协程的线程切换能力;2) async/await模式实现并行任务;3) 结果在主线程合并。日志输出验证了异步执行流程,展示了协程在处理并发任务时的优势。

2026-02-23 11:01:09 147

原创 kotlin 挂起函数2

摘要:测试了Kotlin协程中挂起函数的使用,定义了一个模拟网络请求的挂起函数requestNetworkSuspend,该函数通过withContext切换到IO线程执行2秒延迟操作后返回不同API的模拟数据。在Activity的lifecycleScope中启动协程调用该函数,日志显示主线程未被阻塞,协程能正确挂起和恢复执行,实现了异步网络请求的需求。

2026-02-23 09:42:51 186

原创 kotlin 挂起函数

摘要:本文演示了Kotlin协程中挂起函数的使用方法。通过定义suspend修饰的挂起函数suspendFunction,展示其特性:1)必须在协程作用域内调用;2)使用delay函数实现非阻塞挂起。测试函数testSuspend()展示了两种正确调用方式:runBlocking作用域和Android推荐的lifecycleScope。关键点在于挂起函数能释放线程资源而不阻塞线程,日志输出验证了不同协程的并发执行效果。最后指出需要进一步研究挂起函数在实际场景中的应用价值。

2026-02-22 21:12:19 156

原创 kotlin launch函数

摘要:本文测试了Kotlin协程中launch函数的不同使用场景。首先演示了GlobalScope的基本用法(不推荐),展示了协程的异步特性;然后测试了自定义协程作用域的创建和使用,包括线程调度、多协程管理和作用域取消;最后介绍了Android开发中推荐的lifecycleScope用法,它能自动管理协程生命周期。测试结果表明,launch启动的协程不会阻塞主线程,且通过合理设置作用域可避免内存泄漏问题。文中穿插了多句富有哲理的中文诗句作为日志输出内容。

2026-02-22 20:41:14 159

原创 kotlin runBlocking函数

文章摘要:测试runBlocking函数在不同调度器下的执行行为。默认情况下,runBlocking会阻塞当前线程(主线程)执行代码块;当指定Dispatchers.IO时,代码块会在IO线程执行但仍会阻塞主线程,直到代码块执行完毕。两种情况下都会记录线程信息和时间戳,验证了runBlocking的阻塞特性及线程切换效果。

2026-02-22 19:40:54 264

原创 LeeCode. 347 前K个高频元素

题目要求找出整数数组中出现频率前k高的元素。首先统计每个元素的出现频率,然后根据频率排序并返回前k个元素。示例测试表明,对于输入[1,1,1,2,2,3]和k=2,输出为[1,2]。解决方案使用哈希表统计频率,再通过排序处理,时间复杂度为O(nlogn)。进阶要求优化算法至优于O(nlogn),可通过堆或快速选择等算法实现。

2026-02-20 21:19:31 224

原创 React Native 原生代码通过callBack或Promise调用RN代码

本文介绍了React Native与原生Android模块的异步交互实现方案。在原生ToastModule中新增了两种异步通信方式:1)Callback回调方式,通过getDeviceInfo方法异步返回设备信息;2)Promise方式,通过calculateSum方法进行异步计算并返回结果。RN端App.tsx实现了对应的调用逻辑:使用Callback获取设备型号、系统版本等信息,通过Promise计算两数之和。两种方式都处理了成功和错误回调,并展示了Alert弹窗和界面显示结果。该方案完整演示了RN与原

2026-02-19 19:31:27 206

原创 React Native 原生和RN互相调用以及事件监听

本文展示了React Native与原生Android应用的双向通信实现方案:1)创建ToastModule原生模块实现RN调用原生功能;2)开发EventEmitterModule模块实现原生到RN的事件通知;3)通过自定义ReactPackage整合模块;4)修改MainApplication注册多个Package。重点解决了原生事件参数类型转换问题,使用WritableMap替代Java Map确保跨平台兼容性。最终实现效果:RN可调用原生Toast显示消息,原生能定时向RN发送事件通知并展示。完整代

2026-02-19 12:15:00 422

原创 React Native页面加载流程

React Native加载流程解析:原生工程通过ReactNativeHost引擎初始化,加载RN核心包并指定JS入口文件(App.tsx)。MainActivity继承ReactActivity,通过getMainComponentName确定根组件。引擎解析bundle文件后,将JS组件转换为原生View渲染到界面。流程包括底层库初始化、JS引擎启用、bundle文件读取和组件渲染等关键步骤。后续可探讨原生与RN工程间的通信机制。

2026-02-18 21:55:06 318 1

原创 React Native 开发环境准备

本文详细记录了React Native与Android原生项目混合开发的完整流程。首先通过新版CLI命令创建RN工程并解决依赖安装问题;然后新建Android原生工程,配置Gradle文件、版本控制及RN依赖;接着修改MainApplication、MainActivity等核心代码实现RN集成;最后采用离线bundle方案,通过生成并打包RN资源文件,成功在原生应用中显示RN页面。过程中解决了CLI命令变更、npm依赖安装、Gradle配置、bundle路径等典型问题,特别针对RN 0.73.4版本进行了

2026-02-18 19:24:34 1153

原创 kotlin lazy委托异常时执行流程

Kotlin的lazy委托遇到异常时有两种情况:1)未捕获异常会导致初始化失败,后续访问仍会抛出异常;2)捕获异常并返回默认值则可正常使用。测试代码展示了这两种情况:未捕获异常时shiJu变量会持续抛出IOException,而shiJu2通过try-catch返回了默认诗句。这说明lazy委托的异常处理需要开发者自行控制,捕获异常可保证后续正常访问。

2026-02-08 22:16:25 293

原创 最小跳跃次数

摘要:该算法解决青蛙跳跃问题,计算从数组起始位置到末尾的最少跳跃次数。使用动态规划方法,维护一个数组vec记录到达每个位置的最小跳跃数。通过双重循环检查每个位置j能否一步跳到i,并更新vec[i]的最小值。测试用例{2,3,1,1,4}验证了算法的正确性,输出结果为2次跳跃。时间复杂度为O(n²),空间复杂度O(n)。

2026-02-04 20:27:03 214

原创 单青蛙跳台阶

摘要:青蛙跳台阶问题要求计算跳上n级台阶的方法数,每次可跳1或2级。这是一个典型的递归问题,解为前两项之和:当n=1时返回1,n=2时返回2,否则返回testJump1(n-1)+testJump1(n-2)。该解法体现了动态规划思想,通过分解子问题求解。测试案例显示跳5级台阶有8种方法。

2026-02-04 20:00:07 196

原创 LeeCode231. 2的幂

摘要 该算法用于判断一个整数是否为2的幂次方。通过将数字转换为二进制形式,检查其中是否仅包含一个1。具体实现时,采用位操作右移n并统计1的个数,若超过1则立即返回false。时间复杂度为O(logn),空间复杂度O(1)。测试案例验证了算法正确性,包括边界情况处理(如n≤0时直接返回false)。该方法无需递归或循环的进阶解法可考虑利用n&(n-1)的特性进一步优化。

2026-02-03 16:32:44 124

原创 LeeCode 64. 最小路径和

摘要:本文探讨了在m×n网格中寻找从左上角到右下角的最小路径和问题。使用动态规划方法,通过构建二维数组arr记录到达每个格子的最小路径和。对于每个格子arr[i][j],其值等于上方或左方格子中的较小值加上当前格子的值。代码测试了示例grid=[[1,3,1],[1,5,1],[4,2,1]],正确输出最小路径和7。算法时间复杂度为O(mn),空间复杂度为O(mn)。该方法高效解决了该路径优化问题。

2026-01-26 22:42:01 34

原创 LeeCode 61. 旋转链表

摘要:本文介绍了一个旋转链表的算法,将链表每个节点向右移动k个位置。算法通过将链表存入双向链表容器,计算实际需要移动的次数k%n,然后依次将尾部节点移动到头部。示例展示了输入[1,2,3,4,5]和k=2时输出[4,5,1,2,3]。该方法时间复杂度O(n),但使用了额外空间存储链表节点。测试代码验证了算法的正确性,并处理了k大于链表长度的情况。

2026-01-24 20:57:39 58

ReactNativeDemo

涉及原生代码和RN代码互相调用,RN页面路由配置。

2026-02-23

c# winform五子棋

winform五子棋,实现了AI,可以人机对战。

2025-10-03

Android俄罗斯方块代码

多年以前初学安卓时写的安卓demo。涉及handler延迟任务、自定义view等知识。

2025-03-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除