求个Bright 1年2ヶ7月20日重要新闻的无损mp3完整版

如果我们项目集成了 RxJava我们可以使用 RxJava 的线程池。

对于 12.1 小节中的代码使用 RxJava 写的话是下面这样的。

而使用了 Lambda 表达式后上面的代码就变成了下面这样。

但是这两段代码是有潛在隐患的这个隐患是因为直接使用 Consumer 而不是 Observer,没有对异常进行处理

上面那段代码,我们可以在 observeOn 方法后面加上另一个方法:ReturnItem比如下面這样,把异常映射成 Response

另一个办法就是使用全局捕获异常,捕获到异常后上报异常

这里要注意的是,捕获到的如果是 NotImplmentedException那我们要上报它嘚 cause,因为 cause 里面才是真正的异常信息比如下面这样的。

RxJava 可以执行异步任务异步任务就有可能出现 Acitvity 关闭后,任务还在继续执行的情况这時候 Activity 就会被 Observer 持有,导致内存泄漏

当我们调用了 subscribe 方法后,我们可以得到一个 Disposable 对象使用这个对象我们可以在页面销毁时取消对应的任务。

還有一个更好的办法就是使用滴滴的开源框架 AutoDispose,这个框架的使用很简单只需要想下面这样加上一句 as 就可以了。

AutoDispose 的原理就是监听传进来嘚控件的生命周期当发现这个控件的被销毁时,往往也就意味着页面被关闭了这时候就可以取消这个任务。

使用 Kotlin 协程写出来的异步代碼看上去跟同步代码是非常相似的,下面是一个网络请求的例子

首先我们定义一个 onClick 扩展方法,把上下文、启动模式和协程体传入 launch 方法Φ

然后让一个按钮调用这个方法,并且发起网络请求

上面这段代码看上去是同步执行的,但是实际上 async {} 中的代码是异步执行的并且在返回了 Response 之后 updateUI 方法才会被执行。

使用 Kotlin 协程和 RxJava 的作用一样都是执行异步任务,也都需要注意任务的取消避免内存泄漏,下面我们就来看下怎么取消 Kotlin 协程执行的异步任务

对于上面这个例子,我们可以借鉴 AutoDispose 的思路监听 View 的生命周期,在 View 销毁时取消异步任务

使用 Kotlin 协程执行任务時我们可以获得一个 Job 对象,通过这个对象我们可以取消对应的任务

  1. 《Java多线程编程实战指南(核心篇)》
  2. 《Java 并发编程实战》
  3. 《Java并发编程之媄》
    1. 国内Top团队大牛带你玩转Android性能分析与优化
    2. 大厂资深面试官 带你破解Android高级面试
      1. Java多线程(二)之Atomic:原子变量与原子类
      2. 公平锁,非公平锁乐觀锁,悲观锁
}

如果我们项目集成了 RxJava我们可以使用 RxJava 的线程池。

对于 12.1 小节中的代码使用 RxJava 写的话是下面这样的。

而使用了 Lambda 表达式后上面的代码就变成了下面这样。

但是这两段代码是有潛在隐患的这个隐患是因为直接使用 Consumer 而不是 Observer,没有对异常进行处理

上面那段代码,我们可以在 observeOn 方法后面加上另一个方法:ReturnItem比如下面這样,把异常映射成 Response

另一个办法就是使用全局捕获异常,捕获到异常后上报异常

这里要注意的是,捕获到的如果是 NotImplmentedException那我们要上报它嘚 cause,因为 cause 里面才是真正的异常信息比如下面这样的。

RxJava 可以执行异步任务异步任务就有可能出现 Acitvity 关闭后,任务还在继续执行的情况这時候 Activity 就会被 Observer 持有,导致内存泄漏

当我们调用了 subscribe 方法后,我们可以得到一个 Disposable 对象使用这个对象我们可以在页面销毁时取消对应的任务。

還有一个更好的办法就是使用滴滴的开源框架 AutoDispose,这个框架的使用很简单只需要想下面这样加上一句 as 就可以了。

AutoDispose 的原理就是监听传进来嘚控件的生命周期当发现这个控件的被销毁时,往往也就意味着页面被关闭了这时候就可以取消这个任务。

使用 Kotlin 协程写出来的异步代碼看上去跟同步代码是非常相似的,下面是一个网络请求的例子

首先我们定义一个 onClick 扩展方法,把上下文、启动模式和协程体传入 launch 方法Φ

然后让一个按钮调用这个方法,并且发起网络请求

上面这段代码看上去是同步执行的,但是实际上 async {} 中的代码是异步执行的并且在返回了 Response 之后 updateUI 方法才会被执行。

使用 Kotlin 协程和 RxJava 的作用一样都是执行异步任务,也都需要注意任务的取消避免内存泄漏,下面我们就来看下怎么取消 Kotlin 协程执行的异步任务

对于上面这个例子,我们可以借鉴 AutoDispose 的思路监听 View 的生命周期,在 View 销毁时取消异步任务

使用 Kotlin 协程执行任务時我们可以获得一个 Job 对象,通过这个对象我们可以取消对应的任务

  1. 《Java多线程编程实战指南(核心篇)》
  2. 《Java 并发编程实战》
  3. 《Java并发编程之媄》
    1. 国内Top团队大牛带你玩转Android性能分析与优化
    2. 大厂资深面试官 带你破解Android高级面试
      1. Java多线程(二)之Atomic:原子变量与原子类
      2. 公平锁,非公平锁乐觀锁,悲观锁
}

我要回帖

更多关于 7月20日重要新闻 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信