android工程师面试题
Ⅰ Android Kotlin必问面试题:Kotlin协程在工作中有用过吗
理解协程的目的是,简化复杂的异步代码逻辑,用同步的代码写出复杂的异步代码逻辑。
考察的知识点包括:kotlin、协程、线程、并发。
考生应该如何回答:
1. 你工作这么些年,对于Kotlin语言协程是什么,有了解么?
答:虽然对于一些人来说,协程是新的概念,但是协程是一种编程思想,并不局限于特定的语言。kotlinx.coroutines是由JetBrains开发的kotlin协程库,可以理解为一个线程框架。然而协程不是线程,它基于线程封装的一套更上层工具库,我们可以使用协程库提供的api方便地指定协程中代码执行的线程、切换线程,但无需接触线程Thread类。这与Android的AsyncTask或RxJava的Schelers相似,都解决了异步线程切换的问题。然而,协程通过非阻塞挂起和恢复实现了异步代码的同步编写方式,能够在一个代码块里运行原本运行在不同线程的代码,看起来就像是同步代码。
协程运行在线程中,线程运行在进程中,因此协程基于线程封装。有人会比较协程与线程,问协程是否比线程效率更高。协程并没有改变代码运行在线程中的原则,单线程中的协程执行时间并不会比不用协程少。协程解决了因为多线程带来的编码上的不便,而非线程本身。
2. 那这样说的话,协程到底有什么用?
在Android开发中,通常将耗时操作放在子线程中,并通过回调的方式返回结果后切换主线程更新UI。然而,实际开发中可能遇到并发请求多个接口的需求,需要在所有接口请求完成后再合并处理并更新UI。传统方法管理多个boolean值或采用单线程循环请求接口,或使用RxJava的zip操作符,但这些方法都存在管理复杂、效率低下或使用复杂的问题。使用协程可以解决这个问题,通过非阻塞挂起和恢复的特性,让我们可以编写看起来同步的异步代码,彻底去除回调,简化复杂的异步代码逻辑。
通过协程,我们可以编写看起来同步的异步代码,实现复杂的异步操作逻辑,而无需等待或阻塞主线程,从而提高代码的可读性和可维护性。
