`
kingsword
  • 浏览: 7455 次
社区版块
存档分类
最新评论

Android App中使用Coroutine

 
阅读更多

需要添加两个依赖,一个是coroutines-core库和Android特定的扩展库coroutines-android

  • kotlinx-coroutines-core, 这个库主要提供在Kotlin中使用coroutine的主要接口
  • kotlinx-coroutines-android, 扩展库提供与coroutine相关的Android主线程支持
dependencies {
  ...
  implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:x.x.x"
  implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:x.x.x"
}

 注意:如果要想和RxJava一起使用,可以用kotlin-coroutines-rx

 

Coroutine可以帮助去掉callback的使用方式,把基于callback的异步调用转换成顺序执行的代码,使代码和逻辑更容易阅读和理解。当然,从本质上来看做的事情没有差别,都是跑一个需要花时间的长任务,等待结果然后继续结果处理。

 

理解suspend

写道
When a coroutine calls a function marked suspend, instead of blocking until that function returns like a normal function call, it suspends execution until the result is ready then it resumes where it left off with the result. While it's suspended waiting for a result, it unblocks the thread that it's running on so other functions or coroutines can run.

 根据上面的说法,suspend函数的特点:

  • 可以让一个coroutine暂停执行直至suspend函数返回结果后再继续; suspend关键词和async有一定的相似性,当调用suspend函数的时候,await()可能隐藏在其中
  • 不会阻塞线程

理解CoroutineScope

  • 所有的coroutine都是运行在某个CroutineScope里面, 这个scope会通过它里面的job来控制它管理的coroutine的生命周期。当cancel这个scope的job的时候,所有在这个scope里面启动的coroutine都会被cancel
  • CroutineScope也能被指定一个默认的Dispatcher。这个Dispatcher可以控制coroutine在哪种线程上跑。

Dispathcer.Main

  • 在主线程上启动的coroutine执行suspend函数的时候并不会阻塞主线程。所以主线程上启用coroutine可以提升性能减少线程切换的开销。
  • 当然,启动的coroutine是可以随时切换dispatcher(线程)并把结果传回到原线程,所以一般推荐直接在主线程上启动UI相关的coroutine,这样当coroutine结束的时候会自动回到主线程中。

 

 

分享到:
评论

相关推荐

    Android Studio实例代码.zip_Android app实例_Android实例_android app源码_and

    - **异步处理**:使用AsyncTask、IntentService或现代的协程库(如Kotlin的coroutine)进行后台任务。 - **UI组件**:包括ListView、RecyclerView、ViewPager等,用于展示列表和页面滑动。 - **通知与推送**:...

    基于Android Studio开发的旅游记录与分享APP源码,Android旅游路线记录与分享APP源码

    - 使用异步操作处理耗时任务,如使用IntentService或LiveData配合协程(Coroutine)处理后台任务。 综上所述,这个基于Android Studio的旅游记录与分享APP涉及了众多Android开发的关键技术,包括地图集成、位置...

    loco,loco(log coroutine)是一个在android上使用coroutine的日志库。.zip

    3. **Example or Demo**: 如果loco-master包含一个`app`模块,那么很可能是示例或者演示应用程序,展示如何在实际项目中使用loco库。这可以帮助开发者快速理解和学习如何在自己的代码中引入loco。 4. **README.md**...

    ContactApp-Room-Coroutine:使用Room,Coroutine的简单联系地址应用程序

    `GlobalScope`通常不推荐在Activity或Fragment中使用,因为它们可能导致内存泄漏。相反,可以使用生命周期感知的`CoroutineScope`,如`LifecycleScope`(需配合`lifecycle-coroutines`库)。 ```kotlin val ...

    个人仿制android QQ app

    7. **异步任务处理**:使用Android的AsyncTask或者现代的Coroutine处理后台任务,避免阻塞主线程。 8. **权限管理**:适配Android的运行时权限系统,请求并处理必要的用户权限。 9. **图像处理**:加载、缓存和...

    android天气预报app.rar

    在Android天气预报应用开发中,开发者通常会使用Java或Kotlin语言编写代码,结合Android Studio IDE。关键知识点包括: 1. **网络请求**:应用需要连接到天气API(如OpenWeatherMap、AccuWeather等)获取实时和预测...

    Android应用----智能冰箱app源码.zip

    源码中可能包含对应的连接和数据传输逻辑,如使用Android的BluetoothGatt或WifiManager API。 5. **通知与提醒**:为了提醒用户即将过期的食物或温度异常,应用可能会使用Android的通知系统。开发者会编写代码来...

    Android+jsoup Java爬虫做的一个 阅读app。(有源代码,随手写的 可能代码有点乱)

    在本项目中,开发者使用了Android技术和Jsoup库来创建了一个简单的阅读应用程序。这个应用的主要功能是抓取网络上的信息,展示给用户阅读。以下是关于Android、Jsoup和爬虫的相关知识点: 1. **Android**: Android...

    movieapp:使用android的电影应用程序

    "movieapp:使用Android的电影应用程序"是一个基于Java开发的Android应用项目,旨在为用户提供一个便捷的电影浏览和信息查询平台。在这个应用中,用户可以查看电影的海报、简介、评分以及上映日期等信息,可能还包含...

    安卓Android源码——(精)仿俏江南app功能的订餐软件.zip

    【标题】"安卓Android源码——(精)仿俏江南app功能的订餐软件.zip" 提供的是一个基于Android平台的源代码示例,旨在模仿知名餐饮品牌俏江南的手机订餐应用。这个项目可能涵盖了从用户界面设计到后端数据交互等一系列...

    商城app项目(单机,可上架商店)

    5. **异步处理**:使用AsyncTask、IntentService或现代的Coroutine进行后台任务处理,以避免阻塞主线程。 6. **权限管理**:遵循Android的权限模型,确保在合适的时候请求必要的用户权限。 7. **测试**:可能包含...

    Android人人网源代码

    2. **Android网络请求**:项目中可能使用了HttpURLConnection、OkHttp或者Volley等库来处理网络请求。了解如何在Android应用中发起网络请求、处理响应并解析JSON数据是Android开发的重要一环。 3. **Android权限...

    安卓Android商品购物系统app设计源码.zip

    "安卓Android商品购物系统app设计源码.zip"这个标题表明这是一个与安卓应用开发相关的项目,特别是一个实现商品购物功能的系统。它包含的源代码是设计和构建这样一个应用程序的基础,用于理解软件的工作原理,或者...

    安卓Android求职招聘系统app设计毕业源码案例设计.zip

    "安卓Android求职招聘系统app设计毕业源码案例设计.zip"这个标题表明,这是一份针对安卓Android平台的求职招聘应用的设计案例,主要用于毕业生的项目实践或者课程设计。这个系统的目的是帮助用户浏览职位信息、投递...

    android开发新浪微博客户端+完整攻略+源码

    9. **异步编程与多线程**:为了保证用户体验,网络请求通常在后台线程执行,可以使用AsyncTask、IntentService或者现代的Coroutine进行异步处理。 10. **测试与调试**:良好的测试习惯是保证应用质量的关键。开发者...

    基于android原生开发的混合电影app,

    9. **异步处理**:Android的AsyncTask或使用现代的Coroutine库,用于在后台线程处理网络请求和数据解析,避免阻塞UI。 10. **SQLite数据库**:本地数据存储可能使用SQLite,用于缓存电影信息,提高用户体验。 11. ...

    OSChina Android客户端源码

    观察如何使用AsyncTask、IntentService、JobScheduler或者现代的Coroutine进行异步处理。 9. **权限管理** - 针对Android 6.0及以上版本的运行时权限管理,源码可能包含了如何适配和处理用户权限的逻辑。 10. **...

    Android开发工程师学习路线图

    网络编程是Android开发中的重要一环,你需要学习HTTP协议、HTTPS安全通信,以及使用OkHttp、Retrofit等网络库进行网络请求。同时,了解WebSocket用于实时通信的实现。 数据存储方面,要熟悉SQLite数据库的使用,...

    安卓版本图灵机器人聊天app

    7. **异步处理**:由于网络操作可能耗时较长,因此应使用AsyncTask或者现代的Coroutine来处理后台任务,防止阻塞主线程,确保应用的流畅性。 8. **权限管理**:在Android系统中,网络访问需要声明相应的权限。在...

    Android高手进阶教程

    学习使用现代的Coroutine库,可以简化并发编程,避免内存泄漏和ANR问题。 六、数据存储 掌握SQLite数据库、SharedPreferences、Room Persistence Library以及云同步策略。了解何时使用哪种存储方式,以及如何优化...

Global site tag (gtag.js) - Google Analytics