RxJava2使用过程中遇到的坑
来源:互联网 发布:unity3d卡牌游戏技能 编辑:程序博客网 时间:2024/05/16 09:36
1. 初始化RxJava回收执行周期
背景:RxJava开启一个循环线程在后台默默回收Publisher,默认是1秒循环一次,但是这样比较耗费cpu,纯净后台检测时,cpu唤醒率无法达到标准。
解决方案:设置垃圾检测回收周期为1小时。
/** * 初始化RxJava回收执行的周期 * @see io.reactivex.internal.schedulers.SchedulerPoolFactory */private static void initRxPurgeProperties() { System.setProperty(PURGE_ENABLED_KEY, "true"); System.setProperty(PURGE_PERIOD_SECONDS_KEY, "3600");}
2. RxJava2 取消订阅后,抛出的异常无法捕获,导致程序崩溃
背景:RxJava2的一个重要的设计理念是:不吃掉任何一个异常。产生的问题是,当RxJava2“downStream”取消订阅后,“upStream”仍有可能抛出异常,这时由于已经取消订阅,“downStream”无法处理异常,此时的异常无人处理,便会导致程序崩溃。
示例代码:
mDisposable = Flowable("token") .map(new Function<String, Object>() { @Override public List<Objeect> apply(String token) throws Exception { //... //code A throw new InterceptorIOException("io error");//throw exception when mDisposable.isCanceled() } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<Objeect>() { @Override public void accept(Objeect data) throws Exception { // do something when success } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { //do something when error! //code B //注意:当mDisposable.isCanceled()时抛出的异常,这里不会补货,因为已经取消了订阅 } });
上述代码code A出抛出的异常code B处无法捕获,便会导致程序崩溃。
解决方案:在Application设置RxJavaPlugin的ErrorHandler
/*** RxJava2 当取消订阅后(dispose()),RxJava抛出的异常后续无法接收(此时后台线程仍在跑,可能会抛出IO等异常),全部由RxJavaPlugin接收,需要提前设置ErrorHandler * 详情:http://engineering.rallyhealth.com/mobile/rxjava/reactive/2017/03/15/migrating-to-rxjava-2.html#Error Handling*/private void setRxJavaErrorHandler() { RxJavaPlugins.setErrorHandler(new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { BLogger.d(TAG, "throw test"); } });}
参考文献
https://getpocket.com/a/read/1799392578
http://engineering.rallyhealth.com/mobile/rxjava/reactive/2017/03/15/migrating-to-rxjava-2.html
阅读全文
0 0
- RxJava2使用过程中遇到的坑
- 使用RXJAVA2遇到的坑
- Glide使用过程中遇到的坑
- 使用jquery过程中遇到的坑
- 使用Realm过程中遇到的坑
- Thymeleaf使用过程中遇到的坑
- RabbitMQ使用过程中遇到的坑
- 使用AlertDialog过程中遇到的坑
- appium使用过程中遇到的坑
- Android中rxjava2的基本使用
- 使用JTable过程中遇到的两个坑
- pyspider 使用过程中遇到的一些坑
- Masonry 使用过程中遇到的一些坑
- spark1.6使用过程中遇到的坑
- OSG新手使用过程中可能遇到的坑
- Android Studio 使用过程中遇到的坑
- 记使用react全家桶过程中遇到的坑
- 阿里云ECS使用过程中遇到的坑
- hibernate入门(2)
- Java生成随机数
- 前端开发手册(经验之谈,不断更新)
- Qt5中的QDateTime分类
- JS学习-浏览器对象
- RxJava2使用过程中遇到的坑
- 20.driverbase-CONTAINING_RECODE和双向链表
- 安装mysql 提示mysql_config not found
- HTTP 请求 工具类
- JavaIO流详解
- Boolan C++ 笔记 五
- sublime text 插件SFTP/SVN
- MyEclipse字体设置
- MyCAT 简单部署