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

给公司网站做seo品牌策划书案例

给公司网站做seo,品牌策划书案例,先备案还是先做网站,做团餐的企业网站我们这里只讲解一下,协程在Android项目中常见用法,原理知识不在进行说明了。 依赖 lifecycleScope只能在Activity、Fragment中使用,会绑定Activity和Fragment的生命周期。依赖库: implementation androidx.lifecycle:lifecycle…

我们这里只讲解一下,协程在Android项目中常见用法,原理知识不在进行说明了。

依赖

lifecycleScope只能在Activity、Fragment中使用,会绑定Activity和Fragment的生命周期。依赖库:

implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.0'

viewModelScope 只能在ViewModel中使用,绑定ViewModel的生命周期。依赖库:

implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0'

场景一

 lifecycleScope.launch {println("MainActivity.onCreate 开始")for (i in 0..5) {queryAdministrativeBoundaries()}println("MainActivity.onCreate 结束")}private suspend fun queryAdministrativeBoundaries(): Boolean {return suspendCancellableCoroutine { mCancellableCoroutine ->thread {Thread.sleep(3000)println("MainActivity.queryAdministrativeBoundaries 这里进行耗时操作")if (mCancellableCoroutine.isActive) {mCancellableCoroutine.resume(true)}}}}

场景二

并发多线程需求处理:

 /*** 多线程并发处理* kotlin 为我们提供了Mutex实现线程安全,Mutex通俗点来说就是kotlin的锁,和java 的synchronized和RecentLock对应。* 使用mutex.withLock {*} 即可实现数据的同步*/val mutex = Mutex()fun concurrent2() {var count = 0repeat(10000) {//重复1000次,每次开启一个协程,count自增1CoroutineScope(Dispatchers.Default).launch {mutex.withLock {count++}println("中间值:$count")}}}

并发单线程需求处理:

    /*** 创建协程作用域,使用 Unconfined,这样在协程被挂起前都不会改变线程,也就是说协程始终运行在单线程中*/fun singleThread() {val scope = CoroutineScope(Dispatchers.Unconfined)var count = 0repeat(1000) {//重复1000次,每次开启一个协程,count自增1scope.launch {println("线程id:${Thread.currentThread().id}")//这个线程始终不会变,除非你在这里挂起count++println(count)}}}

基本知识:

不管是指定协程的运行线程,还是临时切换线程,运行完毕会切换回来,都是通过 Dispatchers 来调度的。常用的线程调度为:

  • Dispatchers.Main Android主线程
  • Dispatchers.Unconfined 当前CoroutineScope的线程策略
  • Dispatchers.Default 默认值,为JVM共享线程池
  • Dispatchers.IO IO线程池,默认为64个线程

GlobalScope,还有要一些常见的CoroutineScope对象:

  • lifecycleScope 生命周期范围内,用于Activity组件
  • coroutineScope{} 一个suspend方法,创建一个新的作用域,并在该作用域内执行指定代码块,它并不启动协程。
  • runBlocking{} 是一个裸方法,创建一个协程,并阻塞当前线程,直到协程执行完毕。前面说过,这里不再赘述。
  • runBlocking 与 coroutineScope 的主要区别在于后者在等待所有子协程执行完毕时不会阻塞当前线程。
  • withContext(){}一个suspend方法,在给定的上下文执行给定挂起块并返回结果,它并不启动协程,只会(可能会)导致线程的切换。用它执行的挂起块中的上下文是当前协程的上下文和由它执行的上下文的合并结果。withContext的目的不在于启动子协程,它最初用于将长耗时操作从UI线程切走,完事再切回来。
  • suspend挂起函数是不会阻塞线程的,它只会挂起协程,而不阻塞线程。
  • async是异步执行,withContext是同步执行。

参考文章:
https://www.cnblogs.com/kevin2022/p/16637415.html

Android Kotlin协程(挂起函数+协程作用域)

http://www.15wanjia.com/news/41506.html

相关文章:

  • 北京网站设计制作哪家好百度精准搜索
  • 网站多级栏目个人博客登录首页
  • 网站开发要什么专业备案查询
  • 开个网站建设公司需要什么软件百度网盟推广官方网站
  • c2c模式有哪些电商平台怎么提高seo关键词排名
  • 济南手机网站建设百度如何快速收录网站
  • 做外贸的网站有哪几个优化seo设置
  • 做网站哪个编辑器好用seo教程有什么
  • linux vps网站搬家命令东莞市优速网络科技有限公司
  • 电商网站开发框架宁波优化seo是什么
  • 网站建设顾问有哪些推广平台和渠道
  • 做全房订制网站公司国家大事新闻近三天
  • 深圳市网站建设科技公司推广方案框架
  • 手机网站表单验证天津优化加盟
  • 推广网站站群长沙seo网络公司
  • 本地网站搭建流程济南百度快照推广公司
  • 网站备案真麻烦小红书seo优化
  • wap网站代码网络营销手段有哪四种
  • 微信公众平台注册订阅号阿里巴巴关键词排名优化
  • 包装盒网站模板下载b2b和b2c是什么意思
  • 网络舆情分析的内容深圳seo优化排名推广
  • 南京培训网站建设2022年关键词排名
  • 适合在线做笔试的网站做推广怎么做
  • 做陌陌网站什么做上海seo推广外包
  • 网站建设名词百度免费官网入口
  • b站看片东莞网络推广哪家公司奿
  • 做系统简单还是网站简单常州网站建设制作
  • 武汉做医院网站公司凡科网免费建站官网
  • 萧山做网站公司珠海网站设计
  • 2024年疫情还可能再次爆发seo综合