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

【Kotlin 简介 ( 概念 | 作用 | 创建 Android 工程并进行相关配置开发 | 异步任务与对比 )

文章目录 一、概念 二、作用 三、创建 Android 工程并进行相关配置 1、创建 Android 工程 2、配置环境 3、布局文件 4、异步任务代码示例 5、代码示例 6、完整代码示例...四、异步任务与对比 一、概念 ---- Coroutine 是 Kotlin 语言 中新出现的概念 , 在 Java 语言中没有 ; 是 基于 线程 的 , 是 轻量级 线程 ;...二、作用 ---- 主要作用如下 : 处理耗时任务 : 耗时任务 通常需要 阻塞主线程 , 线程量级太重 , 耗时任务 推荐在中执行 ; 保证主线程安全 : 从主线程中 安全地调用可能会挂起的函数...包下的 Executor,ThreadPoolExecutor,FutureTask 取代 AsyncTask ; 三、创建 Android 工程并进行相关配置 ---- 1、创建 Android...; 注意选择 Kotlin 语言 , Android Studio 会自动添加 Kotlin 语言支持 ; 2、配置环境 在 AndroidManifest.xml 清单文件 中 , 添加网络权限

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

【Kotlin 的挂起恢复 ② ( 挂起 线程阻塞 对比 )

文章目录 一、挂起 线程阻塞 对比 1、挂起 2、线程阻塞 3、挂起阻塞对 UI 的影响 4、挂起分析 一、挂起 线程阻塞 对比 ---- 挂起是中的概念 , 只能在中使用...; 阻塞是线程中的概念 , 可以在主线程子线程中使用 ; 1、挂起 挂起 操作 : 在中使用 delay 函数 , 挂起 20 秒时间 , 然后 20 秒后更新 UI ; delay...函数是 挂起 suspend 函数 ; // 创建 GlobalScope.launch(Dispatchers.Main) { delay(20000) // 主线程更新 UI...UI 的影响 挂起 操作 不会出现 阻塞 UI 刷新的情况 , 挂起的 20 秒不影响 UI 刷新显示 ; 但是如果将主线程阻塞 , UI 不再刷新 , 会出现 ANR 崩溃异常 ; 图形化 GUI..., 会将挂起点的状态保存 , 同时停止执行 , 等待挂起函数执行完毕后 , 继续执行 ; 相当于阻塞的是 , 不会阻塞主线程 ;

1.7K20

Kotlin-派发调度框架

一般开发中所接触到的接口无非是 launch, async, Dispatch.IO...,这些概念是对我们开发者来说的。进入源码的世界之后,这些概念就会被一些内部概念所替代。...搞清楚内部概念对分析源码来说非常关键。 的最小粒度-Coroutine 对没接触过的人来说,一个OOP代码的最小调度粒度是函数。...在中,最小的调度粒度是,在kotlin中叫coroutine。...外部概念内部概念 中外部概念内部概念的差别很大。对应开发者来说,一个的最小粒度coroutine,在的内部概念中叫DispatchedContinuation。...这是整个协调度里最精彩的部分,work-stealing的设计,加上把CPU-boundedIO-intensive任务区分出来,使得用了的代码效率得到极大的提升。

99830

有栈无栈

当前很多的编程语言都内置特性或者有自己的库,如C/C++的libco、golang的goroutine等。而在实现机制上,又可以划分为有栈无栈,我们分别进行介绍。...我们选用两个协库进行介绍,云风的基于ucontext函数簇的libco。...,当阻塞或者退出后,并不指定将执行权限移交给哪个协,而是统一交还给调度器(主),由调度器选择指定的子进行调度拉起。.../cIsShareStack:一系列标志变量 stStackMem_t* stack_mem;,栈空间指针 创建的接口co_create,其中 参数部分: ppco:输出变量,的地址 attr:...,这个标志位为1,表示已经运行了 在第一次调度时,会先通过接口coctx_make先为这个协构建一个上下文 而coctx_make做了什么?

4.3K43

【Kotlin 的挂起恢复 ① ( 的挂起恢复概念 | 的 suspend 挂起函数 )

文章目录 一、的挂起恢复概念 二、的 suspend 挂起函数 一、的挂起恢复概念 ---- 函数 最基本的操作 是 : 调用 call : 通过 函数名或函数地址 调用函数 ; 返回...return : 函数执行完毕后 , 继续执行函数调用的下一行代码 ; 在 调用 call 返回 return 基础上 , 又新增了两种 状态 : 挂起 Suspend : 暂停当前执行的..., 在子线程中执行异步任务后 , 会马上执行后续的代码 , 只是相当于 普通的多线程操作 ; 的作用就是 可以 顺序地执行 异步任务 主线程任务 , 其执行顺序按照代码顺序执行 ; 挂起 函数..., 只能在 体内部 或者 其它挂起函数 中调用 ; 外部不允许使用挂起函数 ; 在中 , 执行 挂起 Suspend 函数 , 将 挂起点的信息 记录下来 , 然后执行耗时操作 , 执行完毕后...){} 中 , 可以直接调用挂起函数 ; 挂起 函数 , 只能在 体内部 或者 其它挂起函数 中调用 ; 外部不允许使用挂起函数 ; 在中 , 执行 挂起 Suspend 函数 , 将 挂起点的信息

1.5K40

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

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

1.2K10

c++ 20原生研究报告 下

引言 上一章节介绍了的现状,并以libco为例介绍了主流有栈的实现原理。这一篇,我们开始进入C++20原生的研究。...上篇文章的地址: johnyao:c++ 20原生研究报告 上 一 C++20总览 这一章节我们会给出,C++20的定义,并列举需要的所有接口。...这一章节会一下涌现很多术语概念,可能你会感到有些困扰,但不用担心,后续章节会逐一解释各个接口的具体使用。 我们先看下C++20的定义。...除了这3个关键字,实现一个C++20还需要实现两个鸭子类型,分别是promise typeawaiter type。...这里需要说明一点,的语义并没有改变C++的基本语法规则,比如: co_await BaseSwapTestCoro::awaiter(); 这里会创建awaiter的一个临时变量,那么这个临时变量在该语句执行完成后就会释放

86020

c++ 20原生研究报告 上

如果你已经对非常熟悉,尤其是知道栈(stack),帧(frame)在知识体系中意义,可以直接跳过相关章节。 一 概述 关于的定义实现,并没有像进程线程那样有统一的标准。...这一章节,我从函数切换的寄存器操作入手,继而通过的实现,不同分类标准的介绍,帮助读者理解的本质。...其他的有栈切换方式libco类似,不一一赘述。 私有栈 vs 共享栈 libco在切换之上,还提供了私有栈共享栈的封装。...简单说下其他同事讨论的相关结论: 这种方式并不会执行寄存器级的上下文保存恢复, 只是将函数执行到的行号记录在对象的成员变量中, 函数通过switch case跳转宏, 在恢复执行时跳转到指定的行号继续执行...对称只提供了一种间的控制转移的语义即pass control, 而非对称提供了两种, invokesuspend。 利用libco可以实现对称,也可以实现非对称

49110

java框架quasarkotlin中的

这得益于Go语言级别的的处理效率。不同于线程,线程是操作系统级别的资源,创建线程,调度线程,销毁线程都是重量级别的操作。...但是最高版本的只支持jdk11以上 添加java agent quasar的实现原理是在java加载class前,通过jdk的instrument机制使用asm来修改目标class的字节码来实现的,他标记了代码的起始结束的位置...而反观,基于固定的几个线程调度,可以轻松实现百万级的处理,而且内存稳稳的。 后记 最后,博主以为Quasar只是一个框架层面的东西,所以就又去看了下同样是jvm语言的kotlin的。...他的语言更简洁,可以直接java混合使用。跑上面这种实例只需要1秒多。...io操作,io操作是阻塞的,的并发也就变成了调度的几个线程的并发了。

23830

什么是_什么时候使用线程

先搞清楚,什么是。 你可能已经听过『进程』『线程』这两个概念。 进程就是二进制可执行文件在计算机内存里的一个运行实例,就好比你的.exe文件是个类,进程就是new出来的那个实例。...,有几个特点: 协同,因为是由程序员自己写的调度策略,其通过协作而不是抢占来进行切换 在用户态完成创建,切换销毁 ⚠️ 从编程角度上看,的思想本质上就是控制流的主动让出(yield)恢复(resume...)机制 generator经常用来实现 说到这里,你应该明白的基本概念了吧?...所以,yield就是yield,下次谁再说yield是,我肯定把你xxxx。 PHP 前面介绍的时候说了,需要程序员自己去编写调度机制,下面我们来看这个机制怎么写。...3)堆栈 鸟哥文中还有一个堆栈的例子。 我们上面说过了,如果在函数中使用了yield,就不能当做函数使用。 所以你在一个函数中嵌套另外一个函数: <?

64120

异步IO

的概念 (coroutine)通常又称之为微线程或纤,它是相互协作的一组子程序(函数)。所谓相互协作指的是在执行函数A时,可以随时中断去执行函数B,然后又中断继续执行函数A。...注意,这一过程并不是函数调用(因为没有调用语句),整个过程看似像多线程,然而只有一个线程执行。通过yield关键字 send()操作来转移执行权,程之间不是调用者与被调用者的关系。...说明:适合处理的是I/O密集型任务,处理CPU密集型任务并不是它的长处,如果要提升CPU的利用率可以考虑“多进程+”的模式。...Python 3.4:引入asyncio.coroutine装饰器用来标记作为的函数,函数asyncio及其事件循环一起使用,来实现异步I/O操作。...Python 3.5:引入了asyncawait,可以使用async def来定义一个函数,这个函数中不能包含任何形式的yield语句,但是可以使用return或await从中返回值。

76650

Java实现

2.线程阻塞状态可运行状态之间的切换。 3.线程上下文的切换。 ,英文Coroutines,是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协。...,又称微线程,纤。英文名Coroutine。  最大的优势就是极高的执行效率。...因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,多线程比,线程数量越多,的性能优势就越明显。...因为是一个线程执行,那怎么利用多核CPU呢?最简单的方法是多进程+,既充分利用多核,又充分发挥的高效率,可获得极高的性能。...Go语言 Go语言对的实现非常强大而简洁,可以轻松创建成百上千个并发执行。

1.9K41

android之GlobalScope()使用介绍

image.png 什么是 (Coroutines)是一种比线程更加轻量级的存在,正如一个进程可以拥有多个线程一样,一个线程可以拥有多个协。...image.png 有一点必须明确的是,一个线程的多个协的运行是串行的。 如果是多核CPU,多个进程或一个进程内的多个线程是可以并行运行的,但是一个线程内却绝对是串行的,无论CPU有多少个核。...毕竟虽然是一个特殊的函数,但仍然是一个函数。一个线程内可以运行多个函数,但这些函数都是串行运行的。 当一个运行时,其它必须挂起。...GlobalScope.lunch GlobalScope.launch用于启动了一个运行在子线程的顶层。...GlobalScope继承于CoroutineScope(的生命周期),表示此的生命周期随应用程序的生命周期。

1.9K20
领券