首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【翻译】深入 Kotlin

我将会指导你使用相关的基本示例,并观察背后到底发生了什么。 为什么像这种解决方案非常有必要? 现代应用程序开发中,处理多线程任务是不可避免的工作。...那么你如何写代码呢?... UI 线程上启动一个网络请求是不明智的做法(安卓上这甚至不可能,因为你的应用程序抛出一个丑陋的 NetworkOnMainThreadException 异常),由于网络请求经常会花费至少半秒的时长...解决方案 3 : Coroutines 这是我们使用来实现的代码的模样: button.setOnClickListener { launch(UI){ val userString...那么让我们来看看具体怎样使用命令式的风格写出类似的异步代码吧! 如何使用基于一种新的函数类型,叫做挂起函数。我们可以函数名称前使用一种新的语言关键字 suspend 来标记。

1.4K10

Kotlin开发中的一些Tips

run { text = "Kotlin" textSize = 14f } 相比较来说使用run显得比较简洁,但let的优势在于可以将it重命名,提高代码的可读性,也可以避免作用域函数嵌套时导致混淆上下文对象的情况...list), (Function1)null.INSTANCE), (Function1)null.INSTANCE); 有两个Function1,其实就是lambda表达式,这是因为Sequence没有使用内联导致的...所以对于一般Android开发中来说,不使用Sequence其实差别不大。。。哈哈。。 有些人错误理解kotlin的,觉得它的性能更高,是一种“轻量级”的线程,类似go语言的。...对于它们来说,或许可以实现真正的。 推荐扔物线大佬关于的文章,帮你更好的理解kotlin的:到底什么是「非阻塞式」挂起?真的更轻量级吗?...既然Kotlin中没有这个机制已经是既成事实,那么我们使用中就需要考虑它带来的影响。比如我们开发中调用一些方法时,要注意看一下源码中是否有指定异常抛出,然后做相应处理,避免不必要的崩溃

52720
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin开发中的一些Tips

run { text = "Kotlin" textSize = 14f } 相比较来说使用run显得比较简洁,但let的优势在于可以将it重命名,提高代码的可读性,也可以避免作用域函数嵌套时导致混淆上下文对象的情况...list), (Function1)null.INSTANCE), (Function1)null.INSTANCE); 有两个Function1,其实就是lambda表达式,这是因为Sequence没有使用内联导致的...所以对于一般Android开发中来说,不使用Sequence其实差别不大。。。哈哈。。 有些人错误理解kotlin的,觉得它的性能更高,是一种“轻量级”的线程,类似go语言的。...对于它们来说,或许可以实现真正的。 推荐扔物线大佬关于的文章,帮你更好的理解kotlin的:到底什么是「非阻塞式」挂起?真的更轻量级吗?...既然Kotlin中没有这个机制已经是既成事实,那么我们使用中就需要考虑它带来的影响。比如我们开发中调用一些方法时,要注意看一下源码中是否有指定异常抛出,然后做相应处理,避免不必要的崩溃

53820

【Kotlin 异常处理 ④ ( Android 中出现异常导致应用崩溃 | Android 使用异常处理器捕获异常 | Android 全局异常处理器 )

文章目录 一、Android 中出现异常导致应用崩溃 二、Android 使用异常处理器捕获异常 三、Android 全局异常处理器 一、Android 中出现异常导致应用崩溃 --...-- 在前几篇博客示例中 , 中 如果出现异常 , 没有进行捕获 , 则程序直接崩溃 , 这种情况下需要进行 异常的捕获 以 避免 Android 应用程序崩溃 ; 示例代码 : package...---- Android 程序中 , 可以使用 异常处理器 CoroutineExceptionHandler 捕获异常 , 将其实例对象传递给 launch 构建器 作为参数即可 ; 该参数作为...上下文 的 异常处理器 CoroutineExceptionHandler 元素 ; 代码示例 : package kim.hsl.coroutine import android.os.Bundle...中产生的 没有被捕获的异常 ; 无法阻止崩溃 : 全局异常处理器 不能捕获这些异常 进行处理 , 应用程序 还是要崩溃 ; 用于调试上报 : 全局异常处理器 仅用于 程序调试 和 异常上报 场景 ,

1.3K10

《快学 Go 语言》第 11 课 —— 千军万马跑

的启动 Go 语言里创建一个非常简单,使用 go 关键词加上一个函数调用就可以了。Go 语言启动一个新的,函数调用将成为这个协的入口。...子异常退出 使用时一定要特别注意保护好每个子,确保它们正常安全的运行。因为子的异常退出会将异常传播到主,直接导致也跟着挂掉,然后整个程序就崩溃了。...从堆栈信息中可以了解到是哪行代码引发了程序崩溃。 为了保护子的安全,通常我们会在的入口函数开头增加 recover() 语句来恢复内部发生的异常,阻断它传播到主导致程序崩溃。...死循环 前面我们通过 recover() 函数可以防止个别崩溃波及整体进程。但是如果有个别死循环了导致其它饥饿得到不运行么?...待请求的响应回复完毕后,链接断开,这个协的寿命也就到此结束。 消息推送系统中,客户端的链接寿命很长,大部分时间这个链接都是空闲状态,客户端每隔几十秒周期性使用心跳来告知服务器你不要断开我。

87520

使用kotlin提高app性能(译)

是一种并发设计模式,您可以Android上使用它来简化异步执行的代码。Kotlin1.3版本添加了 Coroutines,并基于其他语言的既定概念。...Android上,有助于解决两个主要问题: 管理长时间运行的任务,否则可能阻止主线程并导致应用冻结。 提供主安全性,或从主线程安全地调用网络或磁盘操作。...本主题描述了如何使用Kotlin解决这些问题,使您能够编写更清晰,更简洁的应用程序代码。 管理长时间运行的任务 Android上,每个应用程序都有一个主线程来处理用户界面并管理用户交互。...如果您的应用程序为主线程分配了太多工作,那么应用程序可能明显卡顿或运行缓慢。...这些丢弃的异常不会出现在崩溃指标中,也不会出现在logcat中。 并行分解 当函数返回时,必须停止由挂起函数启动的所有协同程序,因此您可能需要保证这些返回之前完成。

2.3K10

Golang 的 调度机制 与 GOMAXPROCS 性能调优

前序 正确地认识 G , M , P 三者的关系,能够对的调度机制有更深入的理解!...本文将会完整介绍完 go 的调度机制,包含: 调度对象的主要组成 各对象的关系 与 分工 gorutine 是如何被执行的 内核线程 sysmon 对 gorutine 的管理 gorutine...中断挂起 与 恢复 GOMAXPROCS 如何影响 go 的并发性能 调度器的三个基本对象: Golang 简称 Go,Go 的(goroutine) 和我们常见的线程(Thread)一样,拥有其调度器...G (Goroutine),代表,也就是每次代码使用 go 关键词时候创建的一个对象 M (Work Thread),工作线程 P (Processor),代表一个处理器,又称上下文 G-M-P...会在每执行一个G任务后递增 如果检查到 schedtick 一直没有递增,说明这个 P 一直执行同一个 G 任务,如果超过10ms,就在这个G任务的栈信息里面加一个 tag 标记 然后这个 G 任务执行的时候

1.9K30

主线程异常会导致 JVM 退出?

大家好,我是坤哥 上周线程崩溃为什么不会导致 JVM 崩溃在其他平台发出后,有一位小伙伴留言说有个地方不严谨 他认为如果 JVM 中的主线程异常没有被捕获,JVM 还是崩溃,那么这个说法是否正确呢,...,不捕获,然后看是否一直打印 test 结果是不断打印 test,说明主线程崩溃,JVM 并没有崩溃,这是怎么回事, JVM 又会在什么情况下完全退出呢?...JVM 崩溃,还有哪些情况导致 JVM 退出呢, javadoc 上说得很清楚 The Java Virtual Machine exits when the only threads running...线程模型简介 我们可以看看 Java 的线程模型,这样大家对 JVM 的线程调度也会有一个更全面的认识,我们可以先从源码角度看看,启动一个 Thread 到底 JVM 内部发生了什么,启动源码代码...,可以认为是无锁的,所以性能很高 我们可以认为线程的执行是由一个个协组成的,是更轻量的存在,内存使用大约只有线程的十分之一甚至是几十分之一,它是使用栈内存按需使用的,所以创建百万级的是非常轻松的事

1.3K20

Kotlin | 关于异常处理,你想知道的都在这里

,其会改变异常的传递方式,当使用它时,我们子的失败不会影响到其他子与父,通俗点理解就是:子自己处理异常,并不会影响其兄弟或者父,如下图所示: 举个简单的例子: val scope...但实则不会,因为子 launch 时会创建新的作用域,其会使用默认新的 Job 替代我们传递 SupervisorJob ,所以导致我们传递的 SupervisorJob 被覆盖。... Android 中,如果没有设置 Thread.setDefaultUncaughtExceptionHandler , 这个异常将立即被抛出,从而导致引发App崩溃。...(即不是 scope直接.async ),则会先将异常传递给父,从而导致异常没有调用处暴漏,我们的tryCatch 自然也就无法拦截。...---- coroutineScope 其主要用于并行分解程子任务时而使用,当其范围内任何子失败时,其所有的子也都将被取消,一旦内部所有的子完成,其也正常返回。

76920

【Kotlin 异常处理 ③ ( 异常处理器 CoroutineExceptionHandler 捕获异常 | 验证 CoroutineScope 的异常捕捉示例 )

进行捕获 , 异常满足如下两个条件才会被捕 : 异常捕获时机 : 自动抛出 的异常 , 可以内被捕获 ; 使用 launch 构建的 可以中捕获异常 , 使用 async 构建的...代码示例 : 使用 launch 构造的 , 可以使用 CoroutineExceptionHandler 捕获异常 ; 使用 async 构造的 , 无法使用 CoroutineExceptionHandler..., 但是 async 创建的中的异常直接抛出导致程序崩溃 ; 14:35:22.587 I CoroutineExceptionHandler 中处理异常...在上面的小节验证了 异常捕获位置 中的情况 , 本小节示例中 , 验证 作用域 CoroutineScope 中捕获异常 ; 代码示例 : 作用域 中 , 使用 launch...时 , 使用的 CoroutineScope(Job()) 进行创建 , 不是 SupervisorJob , 因此 中抛出的异常 , 传递给父 , 由父处理异常 , 父创建时使用

1.1K20

中的取消和异常 | 异常处理详解

如果它的子抛出了一个异常,就会导致 UI 作用域 (UI scope) 被取消,并且由于被取消的作用域无法开启新的,所有的 UI 组件都会变得无法响应。...您可以使用这样的代码创建一个 CoroutineScope: val uiScope = CoroutineScope(SupervisorJob()),这样就会像下图中展示的那样,运行失败时也不会传播取消操作... JVM 中,异常会被打印控制台;而在 Android 中,无论异常在那个 Dispatcher 中发生,都会导致您的应用崩溃。...处理异常‍ 使用一般的 Kotlin 语法处理异常: try/catch 或内建的工具方法,比如 runCatching (其内部还是使用了 try/catch) 前面讲到,所有未捕获的异常一定会被抛出...正如我们之前提到的,SupervisorJob 自己处理异常;而相对的,Job 则会在层级间自动传播异常,这样一来 catch 部分的代码块就不会被调用: coroutineScope {

1.1K20

Golang 的 调度机制 与 GOMAXPROCS 性能调优

本文将会完整介绍完 go 的调度机制,包含: 调度对象的主要组成 各对象的关系 与 分工 gorutine 是如何被执行的 内核线程 sysmon 对 gorutine 的管理 gorutine...中断挂起 与 恢复 GOMAXPROCS 如何影响 go 的并发性能 调度器的三个基本对象: Golang 简称 Go,Go 的(goroutine) 和我们常见的线程(Thread)一样,...G (Goroutine),代表,也就是每次代码使用 go 关键词时候创建的一个对象 M (Work Thread),工作线程 P (Processor),代表一个处理器,又称上下文 G-M-P...会在每执行一个G任务后递增 如果检查到 schedtick 一直没有递增,说明这个 P 一直执行同一个 G 任务,如果超过10ms,就在这个G任务的栈信息里面加一个 tag 标记 然后这个 G 任务执行的时候...这也就直接导致了 M 最多的个数是多少,而 M 的个数就决定了各个 G 队列能同时被多少个 M 线程来进行调取执行!

1.5K10

Kotlin Flow响应式编程,基础知识入门

,因为Flow是构建在Kotlin基础之上的,因此依赖库必不可少。...第三项是用来提供作用域的,同样必不可少。 后两项是ktx的扩展库,这些倒不是必须的,但是能帮忙我们简化不少代码的书写,因此也建议添加上。...这里的delay函数是一个当中的挂起函数,只有作用域或其他挂起函数中才能调用。因此可以看出,flow构建函数还会提供一个挂起函数的上下文给到函数体内部。...这段代码虽然看上去很简单,但是存在着很多隐形的坑。由于Flow的collect函数是一个挂起函数,因此必须在作用域或其他挂起函数中才能调用。...这个问题的本质是水龙头处理数据速度过慢,导致管道中存在大量的积压数据,并且积压的数据一个个继续传递给水龙头,即使这些数据已经过期了。

57920

如何优雅的处理的异常?

JVM 上,异常会被打印到控制台; Android 上,无论发生在什么调度器上,你的应用都会崩溃。 无论你使用哪种类型的 Job,未捕获异常最终都会被抛出。...什么时候使用 Job ?什么时候使用 SupervisorJob ? 当你不想让异常导致和兄弟被取消时,使用 SupervisorJob 或者 supervisorScope 。...异常的处理 ‍ 中,可以使用常规语法来处理异常:try/catch 或者内置的函数 runCatching (内部使用了 try/catch) 。 我们之前说过 未捕获的异常始终会被抛出 。...但是不同的构建器对于异常有不同的处理方式。 Launch launch 中,异常一旦发生就会立马被抛出 。因此,你可以使用 try/catch 包裹会发生异常的代码。...就像之前说过的那样,SupervisorJob 让自己处理异常。与之相反的,Job 传播异常,所以 catch 代码块不会被调用。

1K30

利用Kotlin的实现简单的异步加载详解

前言 众所周知android中当执行程序的耗时超过5秒时就会引发ANR而导致程序崩溃。...因为这是一个IO操作,如果我们UI主线程中调用这段代码,将可能导致程序卡顿或产生ANR崩溃,所以我们需要在新开的线程中调用下边的代码 val bitmap = MediaStore.Images.Media.getBitmap...lauch()创建并启动了一个,这儿的参数Background是一个CoroutineContext对象,确保这个协运行在一个后台线程,确保你的应用程序不会因耗时操作而阻塞和崩溃。...通过这儿的例子代码你会发现在kotlin里边使用来实现线程间的通信和切换非常的简单,比RxJava还简单。看上去就跟你写同步的方式的代码一样。...上边的代码可以被应用到任何别的需要使用异步调用并将值转递到主线程的操作中。和RxJava这种框架比起来Kotlin的可能没有它那么强大。但是Kotlin的可读性更强,也更简单。

2K20

golang模型+pprof

GMP模型: 调度对象的主要组成 各对象的关系与分工 goroutine如何被执行的 内核线程sysmon对goroutine的管理 goroutine的中断挂起与恢复 GOMAXPROCS如何影响...每一个P保存着一个G的队列。...P 入口 main 函数,其实是作为一个 goroutine 来执行 goroutine的中断挂起与恢复 :的切换时间片是10ms,也就是说 goroutine 最多执行10ms就会被 M 切换到下一个...G任务后递增 如果检查到 schedtick 一直没有递增,说明这个 P 一直执行同一个 G 任务,如果超过10ms,就在这个G任务的栈信息里面加一个 tag 标记 然后这个 G 任务执行的时候,如果遇到非内联函数调用...这也就直接导致了 M 最多的个数是多少,而 M 的个数就决定了各个 G 队列能同时被多少个 M 线程来进行调取执行!

1.2K100

是时候使用Kotlin编程了

如果要在一个类里面声明静态成员,可以类的内部使用伴生对象,伴生对象使用关键字companion object。...本质上是一种用户态的轻量级线程,的调用方式与子线程的调用方式一样,但是使用更加方便灵活,但使用并没有子线程那样广泛。...作为一种新的异步编程方式,它使用线程为资源,基于代码逻辑去实现任务之间的调度。程序使用可以书写线性的异步代码,没有callback,大大简化了异步编程。...与Java兼容性允许 Kotlin 应用程序使用所有现有的 Android 库。...表达式语法 11.4.2 函数类型 11.4.3 匿名函数 11.4.4 闭包 11.4.5 函数显示申明 11.5 小结 第12章 12.1 简介 12.1.1 与线程 12.1.2 使用的好处

3.2K10

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券