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

iOS上的KMM :没有事件循环。使用runBlocking { ... }启动一个

KMM是指Kotlin Multiplatform Mobile,它是一种用于开发跨平台移动应用程序的技术。KMM允许开发人员使用Kotlin编写共享的业务逻辑代码,并在iOS和Android平台上共享这些代码。

在iOS上使用KMM时,由于iOS平台的特性,KMM中没有事件循环。事件循环是一种机制,用于处理异步任务和事件的调度和执行。在iOS上,通常使用事件循环来处理用户界面的响应和其他异步操作。

为了在iOS上使用KMM,可以使用runBlocking { ... }来启动一个协程。协程是一种轻量级的线程,可以在异步任务中执行代码。runBlocking { ... }是一个顶层函数,它会阻塞当前线程,直到协程中的代码执行完毕。

使用runBlocking { ... }启动一个协程可以确保在iOS上执行KMM中的代码时不会阻塞主线程,从而保持应用的响应性。在协程中,可以执行各种异步操作,例如网络请求、数据库访问等。

总结起来,iOS上的KMM没有事件循环,但可以使用runBlocking { ... }启动一个协程来执行异步任务和事件处理。这样可以在iOS上使用KMM开发跨平台移动应用程序,并共享业务逻辑代码。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数(Serverless):https://cloud.tencent.com/product/scf
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动推送):https://cloud.tencent.com/product/umeng
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(TBaaS):https://cloud.tencent.com/product/tbaas
  • 腾讯云虚拟专用网络(VPC):https://cloud.tencent.com/product/vpc
  • 腾讯云安全产品(安全加速):https://cloud.tencent.com/product/ddos
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

干货 | 携程机票 App KMM 跨端生产实践

iOS 平台如下: actual typealias MMKV = xxx.xxx.ios.MMKV iOS 没有包名概念,xxx.xxx.ios使用 cinterop 等工具生成 Kotlin...2.5 跨端架构模式组件尝试——MVIKotlin 我们希望找到一款能用于 KMM 类似于 Jetpack AAC 架构模式组件框架来实现 MVVM 模式,但是开源社区内暂时还没有这样一款成熟可用框架...,像 Bootstrapper 这种每次启动只会使用一次组件也需要单独定义,在每次开发过程中即使是很简单业务开发者也需要编写大量样板代码。...更让人头疼是,数据在 Store 内流转时每经过一个组件就会变一个名字,这丛概念讲确实没有什么问题,因为数据在不同组件间流转时从概念上来说会有区别,但在 MVIKotlin 设计中每种概念都由一个...3.2 Kotlin/Native 调用非虚函数使用静态分派 JVM 为了实现多态调用非虚函数机制称为动态分派,即仅在运行时才知道被调用函数到底是哪一个版本(继承类、实现接口会覆盖函数)。

3.1K10

谷歌社区说|聊聊Compose跨平台与KMM

KMM早期推出来时候,那个时候Compose Multiplatform还没有发布,所以大家都觉KMM很鸡肋,因为90%开发者认为移动端主要工作都在编写UI,跨平台不能跨UI叫做哪门子跨平台...这里我基于刚刚创建KMM项目,在KMM基础添加Compose Multiplatform配置。...官方给出了一些Compose Multiplatform模版,也有Kotlin/Wasm模板,但是唯独没有Compose Wasm for Web模板,所以,我自己在github开源了一个模板,...没有使用过Jetpack Compose 对于没有使用过Jetpack Compose这部分人来说,其实我是可以完全理解,一些组件支持,比如地图、WebView等可能还需要一定时间,毕竟现在使用...已经在使用Kotlin,我建议可以学习下Jetpack Compose,一来这是一个趋势,二来它会扩展你跨平台技能。如果你想在未来几年内仍然从事Android开发,我觉得是没有理由拒绝

46510

KotlinNative KMM项目架构

KMM用纯Kotlin编写一次代码,即可在iOS和Android运行,开发应用公共业务逻辑只需要编写一次。KMM减少了为不同平台编写和维护相同代码所花费时间。...KMM SDK层:如alog、PlatformMMKV写成一个SDK可以供其他KMM模块(business)使用。...} 这样Android就可以使用fun v(tag: String, format: String, vararg args: Any?)函数,而iOS没有这个函数。...2、构建系统构建依赖其他模块klib包构建,业务直接pod sdkframework即可。第1种方案比较灵活,版本号可以写脚本控制,但是要求开发人员使用电脑都要配置KMM开发环境。...6.1 sdkframework模块iosMain需要有一个kotlin文件 如果iosMain没有kotlin文件,将无法生成 iOS framework,为其添加一个文件即可,如SDKTest.kt

3K00

Compose也能开发iOS了,快来体验~

搭建项目 创建项目 因为目前Compose for iOS阶段还在试验阶段,所以我们无法使用Android Studio或者IDEA直接创建Compose支持iOS项目,这里我们采用之前方法,先使用...不过这是KMMiOS项目,接下来我们看如何使用Compose编写iOS页面。...实现一个双端网络请求功能 在之前第1弹和第2弹中,我们分别实现了在Desktop、和Web端网络请求功能,现在我们对之前功能在iOS再次实现。...一个尴尬问题 我一直认为存在一个比较尴尬问题,那就是像上面实现一个完整双端网络请求功能需要用到KMM + Compose-jb,但是KMM与Compose-jb并不是一个东西,但是用时候呢基本都是一起用...Compose-jb很久之前已经发了稳定版本只是Compose-iOS目前还没有开放出来,而KMM当前还处于试验阶段,不过在2023年KotlinRoadMap中,Kotlin已经表示将会在23年中发布第一个稳定版本

1.2K30

KMM 求生日记二:KotlinNative 被踩中

最近几周团队 KMM 进度推进了不少,已经陆续把几个小业务需求迁移到了 KMM。 其实万事开头难,最初时候许多公共团队基础类库都没有桥接到 KMM,导致好像啥业务都没法着手开始。...对象 API,通常左右是来生成一个对象(和 Java 中使用 class 方式相似),那么这样 API 可能对 Kotlin 类不兼容。...结语 KMM 代码发布上线在即,如果它能在线上稳定跑一到两个版本(主要担心就是 iOS 平台),就至少可以说明 Kotlin/Native 编译器、 runtime 以及标准库没有太大问题,当然...runtime 坑之前不是没遇到过,例如 Kotlin/Native 没有 JVM 虚方法调用动态分派。...如果能证明语言层面上问题,后续 Model 层业务逻辑就可以大规模迁移到 KMM。 后面我们可能会把精力花在研究一下 cinterop 这个工具以及 iOS 构建系统

2.3K10

说说最近官方公布 Kotlin 动态

KMM 插件 KMM 算是 Kotlin Team 为多平台这个重磅特性挖掘一个重要应用场景。 ?...KMM 运行在 iOS 实际就是 Kotlin Native 代码,通过 Kotlin MPP 与运行在 Android Kotlin Jvm 代码来共享逻辑。...最近随着 Kotlin 1.4 发布推出 KMM 插件也支持了在 Android Studio 直接运行 iOS 应用,启动 iOS 模拟器,甚至单步调试运行在 iOS Kotlin Native...也正是如此,Kotlin 协程 Kotlin Native 版本迟迟没有正式推出多线程版本,在 iOS 使用 Kotlin 协程目前还受制于所调用 API 是否本身已经自己支持了异步以及回调线程切换...再稍微提一下,KMM 插件尽管支持了很多功能,但对于 iOS 工程却仍然不能有效支持,这主要体现在对于 Swift、Objective-C 代码无法高亮、调试等问题上,如果需要编辑 SwiftUI 或者其他使用

1.2K30

再探Kotlin 跨平台——迁移Paging分页库至KMM

前言 KMM发展除了靠官方社区支持外,一些大企业开源落地也尤为重要。从这些开源中我们需要借鉴他设计思想和实现方式。从而在落地遇到问题时,寻得更多解决办法。...定义查询数据方法 这里还定一个一个查询数据方法,使用flow分发分发给UI层,代码如下所示: suspend fun produceViewModels(     events: Flow<Event...Android UI层实现 Android UI层实现比较简单,定义了一个event用于事件分发 val events = MutableSharedFlow(extraBufferCapacity...}       }     }   } } iOS平台实现 AppDelegate.swift文件是程序启动入口文件,RepositoryCell类继承自UICollectionViewCell,并补充了...目前我们所能做就是持续关注KMM动态,探索可尝试落地组件,为己所用。

1.1K20

KMM跨平台开发入门,看这一篇就够了~

上面官方描述说了这么多,简单来说就是KMM注重业务逻辑跨平台,和Flutter、Compose完全相反。即使如此,在这个都想着跨别人年代,KMM也称自己并没有说过不会做UI跨平台......输入项目名称,选择对应配置 在 iOS 框架分发列表中,选择常规框架选项 (这里为了简单演示,实际项目根据所需选择即可)。点击Finish就创建了一个KMM项目。...源集是一个 Gradle 概念,用于逻辑组合在一起多个文件,其中每个组都有自己依赖项。 在 Kotlin Multiplatform 中,共享模块中不同源集可以针对不同平台。 ...可以使用 CocoaPods 或其他依赖项管理器原生 iOS 项目和使用 Gradle Android 项目中使用。...写在最后 到这里,恭喜你,已经入门了KMM使用,更多使用方法需要在实际项目中不断地去总结,去尝试,Jetpack目前也在开发KMM版本,这对KMM发展将会是一个推进~

4.3K20

别具特色跨平台移动开发 - Kotlin Multiplatform Mobile

选择Flutter,最大问题在于你选择了另一个生态,无论是从语言还是从各种支持框架,与主流流行技术几乎没有任何重叠之处。...但原生开发这种一个APP,两端分别开发,始终在成本是企业非常想避免事 (虽然实际上原生开发成本并不一定比跨平台开发多,只是大家感觉跨平台开发似乎只需要一半成本,但这并不是事实) 于是KMM则完全从另一种思路来解决这个问题...在移动端开发中,一个显著特征是: 不同端业务逻辑是几乎完全一致,只是它们实现技术与载体不同而已 所以,KMM则基于上述这个思路,创新式引入了另一种模式: 在保持原生开发基础,使业务模块重用...KMM实现思路是重用业务。 在Android中开发业务实现,KMM会将你业务生成iOS类库。你在iOS开发时候,相当于依赖了一个类库,这个类库提供了本身你业务很多方法。...这个项目主要是: • 最小化示例及说明如何基于KMM进行开发 • 示例是一个最小骨架尝试,包括APPUI,从服务器获取数据,将数据存储到数据库都包含在内 • 实现了Android与iOS两端开发

1.5K20

【Kotlin 协程】协程启动 ④ ( 协程启动模式 | 协程构建器启动模式参数 | DEFAULT 模式 | ATOMIC 模式 | LAZY 模式 | UNDISPATCHED 模式 )

* 如果上下文没有任何dispatcher,也没有任何其他[ContinuationInterceptor],则[Dispatchers.]默认使用“Default”。...; 代码示例 : DEFAULT 模式协程可以被取消 ; runBlocking { // 调用 runBlocking 函数 , 可以将 主线程 包装成 协程 // 指定协程启动模式为...* * 这与[ATOMIC]在某种意义类似,协程开始执行,即使它已经被取消, * 但不同是,它在同一个线程中开始执行。...* * 无限制事件循环 * * 与调度程序。和[MainCoroutineDispatcher。]...,嵌套未分派协程不会形成 * 在无限制嵌套情况下防止潜在堆栈溢出事件循环

94410

kotlin--Channel、多路复用、并发安全

一、Channel Channel相较于Flow,Flow是冷流,本质可以说是一个单线程操作,只有开始收集时,上流代码才会启动,而Channel是一个并发安全队列,可以用来连接不同协程,实现不同协程之间通信...1.Channel使用 创建一个Channel对象,在不同协程中调用其send和receive函数 fun `test channel`() = runBlocking { val channel...produce启动一个生产者协程,并返回ReceiveChannel fun `test channel produce`() = runBlocking { val receiveChannel...actor启动一个消费者协程 fun `test channel acotr`() = runBlocking { val sendChannel = GlobalScope.actor<Int...select,只有SelectCauseN类型事件 1.SelectCause0:对应事件没有返回值,例如join,那么onJoin就是SelectCauseN,使用时,onJoin参数是一个无参函数

87310

Compose 跨平台现状

Compose 能应用于跨平台,主要是基于 KMM 架构,KMM 介绍可以查看官方文档《Get started with Kotlin Multiplatform Mobile[1]》,我们来看下 KMM...实现这个方法,这样,在不同平台集成 KMM 时就可以实现各自平台效果。...KMM 架构可以实现各端通用逻辑,那基于 KMM Compose 主要目的是为了实现各平台 ui 统一。...jb-compose 来实现 ui 复用 web 是自己实现了一套 Compose UI 逻辑,ui 组件依赖是 web-core-js,所以,无法与其他端复用 iOS 暂时没有实现 Compose...来实现组件路由,但该组件 jb 并没有移植到 jb-compose 中,所以,无法在两个平台上实现复用,好在浏览 jb-compose 项目的 issue 时找到了一个可替代方案 Decompose

3K30

Kotlin 协程之Practice

启动一个协程作用域并且在所有子协程执行结束后并没有执行完毕。     ...// runBlocking 和 coroutineScope 主要不同之处在于后者在等待所有的子协程执行完毕时并没有使当前线程阻塞     private fun testCoro() = runBlocking...,可以追踪一个job引用,并手动启动一个单独协程在延迟后取消追踪,     // 但这里会抛出一个TimeoutCancellationException异常     private fun showTwo...,这个协程是轻量级,与其他协程一起并发工作,与launch启动协程不同,launch启动返回一个Job对象     // 不带有任何返回值,而async返回一个Defrred对象一个轻量级非阻塞future...,它确定相应协程在执行时使用一个或多个线程,协程调度器会让协程执行在指定局部线程中,调用它     //运行在线程池中或者不受它限制运行     fun testDispatcher() = runBlocking

1.1K20

Kotlin 协程 通道 Channel 介绍

然后接收者可以定期使用for循环来从Channel中接收元素。 一个close()操作,就是向Channel发送了一个特殊关闭指令。...produce 是一个便捷协程构造器,可以很容易地在生产者端正确工作。 我们使用了consumeEach在消费者端替代了for循环。可以达到上面的一样效果。 4....所有创建了协程函数被定义在了CoroutineScope扩展。所以我们可以依靠结构化并发来确保没有常驻在我们应用程序中全局协程。 如果到这里还是比较迷茫的话,很正常。...数据发出叫做扇出 示例:启动一个定期产生整数协程对象(每秒10个数值),再启动五个处理器协程接收信息。并工作一秒 。...上面示例中这个 for 循环是安全完美地使用多个协程

31810

Kotlin Multiplatform 实战记 | QCon

它不是一个框架,是一种研发范式,通过代码管理与插件,降低 Kotlin 跨 Mobile 端上手门槛 更贴合 Android & iOS 平台。...Android 平台产物 aar,iOS 平台使用 Kotlin Native 编译,产物 framework 与平台无关 common 逻辑可以跨更多平台,如 Mac、Linux、Windows、...对于 KMM 工程来说,通过 Android Studio KMM 插件生成结构是这样: 如何扩展原生能力 先举一个最简单例子,实现一个双端 Log 工具。...cinterop 是 Kotlin Native 支持能力,KMM 工程编译使用了 gradle 工具链,其中对 iOS 来说,我们使用了 Kotlin CocoaPods 插件。...(Atomic) 3 Kotlin Multiplatform 在阿里巴巴实践 1688 日志 我们在日志建设使用了 Kotlin 收拢双端逻辑。

1.4K10

Uni开发app,使用Windows S10,放在ios,全程跟着一个马平川

download.php)生成证书和描述文件 3.ios开发者账号(我申请了一年688人民币,个人账号) 4.HbuilderX开发工具,用来封装(。...wgt)并开发 第二,申请iosApp ID和外包专用密码。...第五,放到App Store 1.开发者账户登录https://Appstoreconnect.Apple.com/,选择我应用,点击数字,创建一个应用。...2.填写app基本信息 钥匙钥匙钥匙3360 预览和截图中上传尺寸要按要求; 如果只发布手机,不发布iPad,就不要发iPad大小图片; 技术支持网站自己建立一个H5网站,技术支持电话号码必须写在这个网站上...如果app使用相册、扫描、麦克风等功能,一定要在HbuilderXmainfest.json文件中描述清楚 3.填写完以上信息后,点击右上角‘保存’。最后一步是构建版本。

25320
领券