RxJava的初学随笔(一)
来源:互联网 发布:tumblr类似软件 编辑:程序博客网 时间:2024/06/07 01:24
通过初步的学习(这里要推荐"大头鬼Bruce"大神的RxJava入门系列 深入浅出RxJava(一:基础篇)),掌握了RxJava的一些基本用法,试探性的把RxJava用于Android项目中。
Splash页
首先想到的就是把app中最基本的启动页加入rxjava
开始的代码如下:
/** * 启动页跳转 */ private void toNextActivity() { //观察者3秒后输出结果,订阅者订阅内容为界面跳转逻辑 mSubscription =<span style="font-family: Arial, Helvetica, sans-serif;">Observable.timer(3, TimeUnit.SECONDS)</span><span style="font-family: Arial, Helvetica, sans-serif;">.subscribe(aLong -> {</span> //获取跳转引导页开关,缺省值为开启 boolean isGuide = (boolean) mSharedPreferencesUtil.get(mSharedPreferencesUtil.ISGUIDE, true); if (isGuide) { mSplashView.toGuideActivity(); //进入引导页后关闭跳转开关 mSharedPreferencesUtil.put(mSharedPreferencesUtil.ISGUIDE, false); } else //跳转主页 mSplashView.toMainActivity(); });这里用到了RxJava的一个操作符"timer",从字面上看得出此操作符跟时间有关,具体用法就是延时多少秒输出订阅内容,参数1表示时间量度,参数2表示时间单位。
程序执行后,逻辑执行顺利,但是遇到了一个小问题。在此之前,项目中自定义了Activity的过场动画
代码:
/** * 进入动画 */ void baseOverridePendingTransition_in() { overridePendingTransition(R.anim.in_right_left, R.anim.scale_small_out); }之前跳转此动画正常执行,但使用RxJava后动画不能执行,经过一番排除,总算找到原因。在上面一段RxJava代码中没用正确使用Scheduler(关于Scheduler的使用这里推荐一篇文章给 Android 开发者的 RxJava 详解里面详细讲解Scheduler的原理),因为
<span style="font-family: Arial, Helvetica, sans-serif;">观察者和订阅者中的代码执行默认都不在Android的UI线程,而</span><span style="font-family: Arial, Helvetica, sans-serif;">overridePendingTransition(R.anim.in_right_left, R.anim.scale_small_out);必须执行在UI线程,所以这里需要用到Scheduler。更改后的代码:</span><pre name="code" class="java"> /** * 启动页跳转 */ private void toNextActivity() { //观察者3秒后输出结果,订阅者订阅内容为界面跳转逻辑 mSubscription = Observable.timer(3, TimeUnit.SECONDS).<span style="color:#ff0000;">observeOn(AndroidSchedulers.mainThread())</span>.subscribe(aLong -> { //获取跳转引导页开关,缺省值为开启 boolean isGuide = (boolean) mSharedPreferencesUtil.get(mSharedPreferencesUtil.ISGUIDE, true); if (isGuide) { mSplashView.toGuideActivity(); //进入引导页后关闭跳转开关 mSharedPreferencesUtil.put(mSharedPreferencesUtil.ISGUIDE, false); } else //跳转主页 mSplashView.toMainActivity(); }); }红色的部分表示订阅者中的代码在Android UI线程中执行,更改后执行代码调转动画正常。
0 0
- RxJava的初学随笔(一)
- RxJava的初学随笔(二)
- RxJava的初学随笔(三)
- RxJava的初学随笔(四)
- 初学 retrofit2与RXJava 的搭配使用
- 初入职场的随笔(一)
- 程序员的随笔一
- RxJava的学习旅程(一)
- 【RxJava】的学习(一)
- RxJava的初步使用(一)
- RxJava的使用(一)
- RxJava的简单使用(一)
- 关于Dragger2与RXjava集合框架的项目随笔
- rxjava初学笔记
- Python初学随笔
- 初学java随笔
- Android 开发者的 RxJava 学习一,走进RxJava
- 关于技术更新随笔,给初学编程的一点经验
- iOS 推送问题 registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later
- Netty开源库的初步使用
- android存储方式(内部存储、外部存储)
- C语言队列
- jquery datatables 的 配置参数
- RxJava的初学随笔(一)
- Set(HashSet、TreeSet)、泛型
- java自带线程池和队列详细讲解
- fatal: Not a git repository (or any of the parent directories): .git
- stm32库函数学习篇---NVIC与外部中断
- Makefile学习
- 25 不使用加减乘除做加法
- 10个重要的Linux ps命令实战
- POJ3621 Sightseeing Cows