摘要: val result = doLongTask() println(result) 又有两个情况,不太明白代码执行顺序。 1、「协程内部会阻塞」 suspend fun doLongTask(taskName: String, delayTime: Long): String { delay(del 阅读全文
posted @ 2026-01-09 15:55 touchmore 阅读(5) 评论(0) 推荐(0)
摘要: 协程是运行在线程之上的、由用户程序控制的、更高级的并发抽象。一个线程可以同时运行多个协程,由协程调度器负责在它们之间进行高效的、用户态的切换。 阅读全文
posted @ 2026-01-09 11:03 touchmore 阅读(2) 评论(0) 推荐(0)
摘要: suspend fun,会挂起当前协程,不阻塞线程。 它能挂起当前协程的执行流程,但不会阻塞协程所在的线程,这也是协程相比线程更轻量、更高效的核心原因之一。 挂起vs阻塞 阻塞(Block):线程停在原地等待任务完成(比如网络请求、文件读写),这段时间线程什么都做不了,CPU 资源被浪费。 挂起(S 阅读全文
posted @ 2026-01-08 16:45 touchmore 阅读(4) 评论(0) 推荐(0)
摘要: 协程,代码执行顺序(2) //示例3 fun main() = runBlocking { val deferred1 = async { println("calculateSum1") calculateSum(1, 2) } println("deferred1") val deferred2 阅读全文
posted @ 2026-01-08 15:53 touchmore 阅读(2) 评论(0) 推荐(0)
摘要: 阻塞与非阻塞 这是Android开发中处理耗时操作的关键概念。在IO操作(网络请求、文件读写、数据库访问)、多线程(线程同步)/多进程通信中频繁出现。 描述程序执行时等待操作完成的两种模式。区别是:操作未完成时,当前执行流是否会被挂起等待。 1、阻塞(模式) (耗时)操作未完成前,当前线程/进程/执 阅读全文
posted @ 2026-01-08 15:01 touchmore 阅读(9) 评论(0) 推荐(0)
摘要: 协程,代码执行顺序 fun main() = runBlocking { println("main start: ${Thread.currentThread().name}") // 第14行 val job = launch { // 第16行 println("coroutine is ru 阅读全文
posted @ 2026-01-08 13:24 touchmore 阅读(1) 评论(0) 推荐(0)
摘要: 这段代码,为什么不能加if(mOnKeyListener == null) 这段代码不能加 `if(mOnKeyListener == null)` 判断的原因主要有以下几点: 1. **位置问题**:当前代码位于 `onBindViewHolder` 方法内部,每次绑定数据时都会执行。如果加上 ` 阅读全文
posted @ 2025-12-18 19:54 touchmore 阅读(4) 评论(0) 推荐(0)
摘要: 2025/12/15 merge tools:parentTag="android.widget.RelativeLayout" 声明父容器为相对布局。 2025/12/18 在抓到的布局中,一层一层的控件里,可以搜索该选中的控件中的属性 可以看到,clipChildren和clipToPaddin 阅读全文
posted @ 2025-12-15 17:35 touchmore 阅读(6) 评论(0) 推荐(0)
摘要: adb logcat –cadb logcat -v threadtime > c:/Users/xxx/Desktop/log1.log adb shell getprop |grep xxx 阅读全文
posted @ 2025-10-29 10:14 touchmore 阅读(6) 评论(0) 推荐(0)
摘要: 列表项点击,从viewHolder >> adapter >> fragment,理清关系了。 mClickListener是传过来的,MyRecordViewHolder << MyRecordPageAdapter << MyRecordPage 最终在presenter中执行 阅读全文
posted @ 2025-09-16 10:52 touchmore 阅读(4) 评论(0) 推荐(0)