当前位置: 首页 > news >正文

中国百科网vip钓鱼网站开发网站门户设计

中国百科网vip钓鱼网站开发,网站门户设计,遂宁商城网站建设方案,北京网站开发公司一网天行Kotlin的重要优势及特点之——结构化并发 Kotlin 协程是一种并发设计模式#xff0c;可以在 Android 平台上让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理#xff0c;例如网络调用、本地数据访问等任务的管理。 简单来说#xff0c;协程就是一种轻量级的非… Kotlin的重要优势及特点之——结构化并发 Kotlin 协程是一种并发设计模式可以在 Android 平台上让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理例如网络调用、本地数据访问等任务的管理。 简单来说协程就是一种轻量级的非阻塞的线程工具API可以用同步的方式写出异步的代码优雅地切换线程和处理回调地狱。与线程的关系线程在进程中协程在线程中。 所有源文件都必须编码为 UTF-8。 来源标注Android 上的 Kotlin 协程  |  Android Developers 书接上篇Android Kotlin知识汇总三Kotlin 协程-CSDN博客 示例概览 根据应用架构指南本主题中的示例会发出网络请求并将结果返回到主线程然后应用可以在主线程上向用户显示结果。 具体而言ViewModel 架构组件会在主线程上调用代码库层以触发网络请求。ViewModel 包含一组可直接与协程配合使用的 KTX 扩展lifecycle-viewmodel-ktx 库。 依赖项信息 如需在 Android 项目中使用协程请将以下依赖项添加到应用的 build.gradle 文件中 dependencies {implementation(org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9) } Repository 类 创建LoginRepository类其中makeLoginRequest方法是同步的并且会阻塞发起调用的线程。为了对网络请求的响应建模我们创建了自己的 Result 类。  sealed class Resultout R {data class Successout T(val data: T) : ResultT()data class Error(val exception: Exception) : ResultNothing() }class LoginRepository(private val responseParser: LoginResponseParser) {private const val loginUrl https://example.com/loginfun makeLoginRequest(jsonBody: String): ResultLoginResponse {//IO操作val url URL(loginUrl)(url.openConnection() as? HttpURLConnection)?.run {requestMethod POSTsetRequestProperty(Content-Type, application/json; utf-8)setRequestProperty(Accept, application/json)doOutput trueoutputStream.write(jsonBody.toByteArray())return Result.Success(responseParser.parse(inputStream))}return Result.Error(Exception(Cannot open HttpURLConnection))} } ViewModel类 用于在点击登陆例如点击按钮时触发网络请求  class LoginViewModel(private val loginRepository: LoginRepository): ViewModel() {fun login(username: String, token: String) {val jsonBody { username: \$username\, token: \$token\}loginRepository.makeLoginRequest(jsonBody)} } 使用上述代码LoginViewModel 会在网络请求发出时阻塞UI线程。如需将执行操作移出主线程最简单的方法是创建一个新的协程然后在 I/O 线程上执行网络请求  class LoginViewModel(private val loginRepository: LoginRepository): ViewModel() {fun login(username: String, token: String) {// 创建并开启一个 coroutine 协程viewModelScope.launch(Dispatchers.IO) {val jsonBody { username: \$username\, token: \$token\}loginRepository.makeLoginRequest(jsonBody)}} } 由于此协程通过 viewModelScope 启动因此在 ViewModel 的作用域内执行。如果 ViewModel 因用户离开屏幕而被销毁则 viewModelScope 会自动取消且所有运行的协程也会被取消。 使用协程确保主线程安全 makeLoginRequest 函数不是主线程安全的因为从主线程调用 makeLoginRequest 确实会阻塞界面。可以使用协程库中的 withContext() 函数将协程的执行操作移至其他线程 class LoginRepository(...) {...suspend fun makeLoginRequest(jsonBody: String): ResultLoginResponse {return withContext(Dispatchers.IO) {//IO操作...}} } makeLoginRequest 用 suspend 关键字进行标记强制从协程内调用函数。  class LoginViewModel(private val loginRepository: LoginRepository): ViewModel() {fun login(username: String, token: String) {// Create a new coroutine on the UI threadviewModelScope.launch {val jsonBody { username: \$username\, token: \$token\}val result loginRepository.makeLoginRequest(jsonBody)when (result) {is Result.SuccessLoginResponse - else - // Show error in UI}}} } makeLoginRequest 是一个 suspend 函数而所有 suspend 函数都必须在协程中执行。launch 不接受 Dispatchers.IO 参数。则从 viewModelScope 启动的所有协程都会在主线程中运行。后续可以处理网络请求的结果以显示成功或失败界面。 处理异常 为了处理 Repository 层可能抛出的异常请使用 Kotlin 对异常的内置支持。在以下示例中我们使用的是 try-catch 块 class LoginViewModel(private val loginRepository: LoginRepository): ViewModel() {fun login(username: String, token: String) {viewModelScope.launch {val jsonBody { username: \$username\, token: \$token\}val result try {loginRepository.makeLoginRequest(jsonBody)} catch(e: Exception) {Result.Error(Exception(Network request failed))}...}} } 在此示例中makeLoginRequest() 调用抛出的任何意外异常都会处理为界面错误。
http://www.dnsts.com.cn/news/185633.html

相关文章:

  • 成都网站建设小程序石家庄网站建设销售电话
  • 广州建站商城太原网站建设模板
  • 个人网站需要那些网站建设常用模板下载
  • 所有网站302跳转百度广告招牌制作设计软件
  • 杭州市建设监理协会网站asp网站模板源码
  • 岳阳网站建设哪里便宜复兴区网络推广公司
  • 中山市城乡和住房建设局网站武安网站建设价格
  • 深圳建设工程质量协会网站wordpress进不去后台
  • 湘潭做网站价格优选磐石网络建设企业网站方案
  • 做网站联系电话wordpress gallery
  • 什么网站做的好看wordpress 支付宝付款
  • 网站制作是不是要一个后台东莞是哪个省
  • 多少钱算网站开发公司补的空置房物业费分录
  • 如何做好网站推广优化虚拟主机免费领取
  • 深圳建网站一般多少钱app开发上线流程
  • 网站开发和ipv6手机seo快速排名
  • 网站建设开发综合实训报告小程序短链接生成
  • 注册电气师在哪个网站做变更贵阳网站建设包首页
  • 孟州网站开发app婚纱摄影网站html模板
  • 建网站 域名做网站哪里学
  • wordpress站群源码网站如何做监控直播
  • 常州网站建设公司市场网站建设为什么有些100元的
  • 上海网站搜索引擎优化嵌入式软件开发属于前端还是后端
  • 网站挂百度广告网站推广目标是什么
  • 完整网站建设教程上海全屋整装哪家好
  • 网站建设 企炬江阴wordpress增加启动页
  • 小说素材网站颍上县住房和城乡建设局网站
  • 展示型网站首页设计解析烟台做网站案例
  • 网站建设的建议例子微信网站开发是什么
  • 南阳网站建设推广建设一个大型网站大概费用