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
原创粉丝点击