原文链接:https://medium.com/androiddevelopers/room-coroutines-422b786dc4c5
作者:Florina Muntenescu
Room
从2.1版本(目前已更新到2.2.0-alpha03版本)开始添加了对kotlin
协程的支持。现在我们可以使用suspend
关键字将DAO
中的方法声明为挂起函数,从而保证这些方法不在主线程中执行。请继续阅读以理解如何在Room
中使用协程,它的工作原理,以及如何测试这个新功能。
原文链接:https://medium.com/androiddevelopers/room-coroutines-422b786dc4c5
作者:Florina Muntenescu
Room
从2.1版本(目前已更新到2.2.0-alpha03版本)开始添加了对kotlin
协程的支持。现在我们可以使用suspend
关键字将DAO
中的方法声明为挂起函数,从而保证这些方法不在主线程中执行。请继续阅读以理解如何在Room
中使用协程,它的工作原理,以及如何测试这个新功能。
前面一篇文章在介绍Java内存模型的三大特性(原子性、可见性、有序性)时,在可见性和有序性中都提到了volatile关键字,那这篇文章就来介绍volatile关键字的内存语义以及实现其特性的内存屏障。
volatile是JVM提供的一种最轻量级的同步机制,因为Java内存模型为volatile定义特殊的访问规则,使其可以实现Java内存模型中的两大特性:可见性和有序性。正因为volatile关键字具有这两大特性,所以我们可以使用volatile关键字解决多线程中的某些同步问题。
volatile的可见性是指当一个变量被volatile修饰后,这个变量就对所有线程均可见。白话点就是说当一个线程修改了一个volatile修饰的变量后,其他线程可以立刻得知这个变量的修改,拿到最这个变量最新的值。
在介绍Java内存模型之前,我们先介绍一下计算机硬件的内存模型,因为JVM的并发和物理机器的并发很相似,甚至JVM并发操作中很多设计都是因为计算机系统的设计引发的。
大家都知道计算机系统处理任务主要是靠处理器(CPU)来进行运算的,而运算中又会涉及到数据,数据在哪呢,数据自然是存储在计算机内存中,所以处理器在运算过程中不可避免的会涉及到与内存的读写交互,比如读取运算所需的数据,存储运算得到的数据结果等。而处理器的运算速度相比物理内存的读写速度要快得多,所以会出现处理器要等待内存数据读写结束后才能进行下一步的运算,因此为了提高计算机的运算速度,现在的计算机系统为处理器添加了一层读写速度尽量接近处理器的高速缓存来缓解内存与处理器之间的性能差异。这样在处理任务时将运算需要的数据复制到缓存中,运算结束后再将数据从缓存中同步写回到内存,这样处理器在运算时就不需要等待内存数据读写结束了。
当一个项目越来越大,越来越复杂后,代码量就会变得越来大,难以阅读难以维护,业务之间出现耦合的可能性也会越来越大,同时整个APP编译调试的时间也会越来越长。
而使用模块化开发则可以解决以上问题:
但是…这篇文章不是教你如何进行模块化开发,而是介绍如何进行模块化开发的工程配置,以满足模块化开发过程中的多团队协作问题。
Kotlin Coroutine(协程)系列:
1. Kotlin Coroutine(协程) 简介
2. Kotlin Coroutine(协程) 基本知识
3. Android中用Kotlin Coroutine(协程)和Retrofit进行网络请求和取消请求
前面两篇文章介绍了协程的一些基本概念和基本知识,这篇则介绍在Android
中如何使用协程配合Retrofit
发起网络请求,同时介绍在使用协程时如何优雅的取消已经发起的网络请求。
Kotlin Coroutine(协程)系列:
1. Kotlin Coroutine(协程) 简介
2. Kotlin Coroutine(协程) 基本知识
3. Android中用Kotlin Coroutine(协程)和Retrofit进行网络请求和取消请求
这篇文章主要介绍协程中的一些基本概念。
在APP
开发过程中,经常遇到需要添加背景、设置边距、动态显示和隐藏某个组件。
但是在Flutter
中,能同时具有添加背景、设置边距、阴影、边框、圆角的布局只有Container
(参考我上一篇文章的介绍Flutter入门之Row、Column、Container布局),这个已经算是业务功能比较多的组件了,而要想实现组件的显示和隐藏则需要用到另外一个组件Offstage
,水平的线性布局则需要用到组件Row
,垂直的线性布局则需要用到组件Column
,而Row
和Column
这两个布局都不具备直接设置背景、边距、显示和隐藏等功能。
Update your browser to view this website correctly. Update my browser now