1、伴生对象的引用

image.png
答案:
image.png
coroutineContext[Job]

2、Kotlin 的尾递归

左子树遍历

  1. internal class CombinedContext(
  2. private val left: CoroutineContext,
  3. private val element: Element
  4. ) : CoroutineContext, Serializable {
  5. override fun <E : Element> get(key: Key<E>): E? {
  6. var cur = this
  7. while (true) {
  8. cur.element[key]?.let { return it }
  9. val next = cur.left
  10. if (next is CombinedContext) {
  11. cur = next
  12. } else {
  13. return next[key]
  14. }
  15. }
  16. }

3、并发问题

如非必要不要随意切换线程

            GlobalScope.launch {
                var num = 0
                Executors.newFixedThreadPool(10).asCoroutineDispatcher().use { executorCoroutineDispatcher ->

                    List(1000000) {
                        GlobalScope.launch(executorCoroutineDispatcher) {
                            num++;
                        }
                    }.forEach {
                        it.join()
                    }

                }
                print(num)
            }
            Thread.sleep(1000)
> Task :Main.main()
999995

协程方法另一种写法

image.png

全局异常处理

String[] PermissionString={Manifest.permission.READ_EXTERNAL_STORAGE};
ActivityCompat.requestPermissions(SettingGuideActivity.this,
PermissionString, 1);