Android开发之《RXJava的简单实现》

import android.util.Log;
import rx.Observable;
import rx.Subscriber;
import rx.functions.Action1;

public class RXJavaDemo {
    private static final String TAG = RXJavaDemo.class.getSimpleName();

    private int count = 0;

    public RXJavaDemo() {
    }

    public void call() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    mObservable.subscribe(mSubscriber);
                    mObservable.subscribe(action1);
                    Observable.just("just Object").subscribe(action1);
                }
            }
        }).start();
    }

    private Observable<String> mObservable = Observable.create(
            new Observable.OnSubscribe<String>() {
                @Override
                public void call(Subscriber<? super String> subscriber) {
                    subscriber.onNext("1");
                    subscriber.onNext("2");
                    subscriber.onNext("3");
                    subscriber.onCompleted();
                }
            });

    private Subscriber<String> mSubscriber = new Subscriber<String>() {
        @Override
        public void onNext(String s) {
            Log.v(TAG, "onNext, string : " + s);
            Log.v(TAG, "onNext, count : " + count);
            count++;

            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onCompleted() {
            Log.v(TAG, "onCompleted");
        }

        @Override
        public void onError(Throwable e) {
            Log.v(TAG, "onError, e : " + e.toString());
        }
    };

    private Action1<String> action1 = new Action1() {
        @Override
        public void call(Object o) {
            if (o == null) {
                Log.v(TAG, "Action1, object is null");
                return;
            }

            Log.v(TAG, "Acition1, o : " + ((String) o));
        }
    };
}

  

    compile ‘io.reactivex:rxjava:1.0.9‘
    compile ‘io.reactivex:rxandroid:0.24.0‘
    compile ‘com.squareup.retrofit:retrofit:1.9.0‘

RxJava提供四种不同的Subject:PublishSubject、BehaviorSubject、、ReplaySubject.、AsyncSubject

BehaviorSubject, 会首先向他的订阅者发送截至订阅前最新的一个数据对象(或初始值),然后正常发送订阅后的数据流。

ReplaySubject, 会缓存它所订阅的所有数据,向任意一个订阅它的观察者重发。

AsyncSubject, 当Observable完成时只会发布最后一个数据给已经订阅的每一个观察者。

PublishSubject, 没有发送数据,观察者只能等待,没有线程阻塞,没有资源消耗。在调用publishSubject.onNext时,才发送消息。 发送消息结束以后,publishSubject并没有结束,观察者等待消息再一次的发送。如果想关闭publishSubject,publishSubject需调用publishSubject.onCompleted方法关闭。此时,publishSubject再发送消息,观察者不能收到发送的消息。

时间: 2024-07-31 19:50:03

Android开发之《RXJava的简单实现》的相关文章

Android中GPU硬件加速控制及其在2D图形绘制上的局限

图形的渲染可分为两种:软件渲染和硬件渲染.软件渲染是靠CPU计算各种坐标并绘制,主要是占用内存:硬件渲染是靠GPU,主要占用显存,一般的3D图形程序(OpenGL.DirectX)都是GPU加速的. 在Android3.0之前,2D绘图API只支持软件渲染模式,从Android3.0开始,2D绘图API开始支持GPU硬件渲染,即View中的Canvas的绘图操作会使用GPU,所以从Android 3.0(API Level 11)开始,View中就多了一些和硬件相关的方法.如果App的Andro

Android 图形与硬件加速

今天在研究Android-PullToRefresh的时候,突然发现 清单文件中有这么一句 android:hardwareAccelerated="true".以前没有见过,果断百度,发现原来是与硬件加速有关,参见google开发者文档>   说是从Android3.0 开始 ,Android的2D 管道线就被设计成支持硬件加速的了.硬加速使用GPU承担了所有在View的canvas上执行的绘制操作.同时这样的应用也会消耗更多的内存.   启用硬加速最简单的的方法是对整个应用启

Android动画之硬件加速

你的动画写出来卡嘛?流畅嘛 如果你想提升动画的性能,那就是用它-hardware layers. During animations your views may be redrawn each frame. If you use view layers, instead of having to redraw each frame, views render once into an off-screen buffer which can be reused. In addition, har

Android硬件加速介绍与实现

概述 在手机客户端尤其是Android应用的开发过程中,我们经常会接触到"硬件加速"这个词.由于操作系统对底层软硬件封装非常完善,上层软件开发者往往对硬件加速的底层原理了解很少,也不清楚了解底层原理的意义,因此常会有一些误解,如硬件加速是不是通过特殊算法实现页面渲染加速,或是通过硬件提高CPU/GPU运算速率实现渲染加速. 本文尝试从底层硬件原理,一直到上层代码实现,对硬件加速技术进行简单介绍,其中上层实现基于Android 6.0. 硬件加速对App开发的意义 对于App开发者,简单

4.1.Android的硬件加速官方文档

参考 https://developer.android.com/guide/topics/graphics/hardware-accel.html 硬件加速背景知识 在手机客户端尤其是Android应用的开发过程中,我们经常会接触到"硬件加速"这个词.由于操作系统对底层软硬件封装非常完善,上层软件开发者往往对硬件加速的底层原理了解很少,也不清楚了解底层原理的意义,因此常会有一些误解,如硬件加速是不是通过特殊算法实现页面渲染加速,或是通过硬件提高CPU/GPU运算速率实现渲染加速. 本

Android硬件加速

概述 从Android 3.0开始(API L11),Android开始全面使用硬件加速来进行2D渲染,硬件加速是指Android中在View上进行绘制的图形图像都使用GPU来进行绘制,使用硬件加速,在大部分时候都让绘制更加流畅,但付出的代价是需要消耗更多的内存资源. 硬件加速在API L14之上是默认开启的,对于基本的View绘制,通过硬件加速可以增加绘图的流程性,但是要注意的是,并不是所有的2D图形绘制API都支持硬件加速. 通过开发者选项中的"强制进行GPU渲染",用户可以为全局

4.2.Android 硬件加速补充

具体源码分析在之后上传,因为涉及的东西特别多 参考 https://hencoder.com/ui-1-8/ https://blog.csdn.net/OneDeveloper/article/details/79791302 https://www.jianshu.com/p/f1feafffc365 概念 在正式开始之前需要说明一下,作为绘制部分的最后一期,本期内容只是为了内容的完整性做一个补充,因为之前好几期的内容里都有涉及硬件加速的技术点,而一些读者因为不了解硬件加速而产生了一些疑问.

Android应用开发:图形绘制之硬件加速

引言 在Android3.0后,Android的2D渲染通道开始支持硬件加速,也就是说所有View的Canvas绘画动作都会使用GPU,同时也代表着应用程序会损耗更多的内存.而在Android4.0(API14)之后硬件加速功能就被默认开启了.如果你的应用程序是由各种标准View和Drawable组成的,那么硬件加速并不会引起任何不适.众所周知,使用硬件加速会调用到OpenGL,但是OpenGL不同版本会存在不支持一些操作的情况,也就是说,硬件加速可能会影响一些自定义View及绘制过程.因此,A

Android应用程序UI硬件加速渲染技术简要介绍和学习计划

Android系统的流畅性一直被拿来与iOS比较,并且认为不如后者.这一方面与Android设备硬件质量参差不齐有关,另一方面也与Android系统的实现有关.例如在3.0前,Android应用程序UI绘制不支持硬件加速.不过从4.0开始,Android系统一直以"run fast, smooth, and responsively"为目标对UI进行优化.本文对这些优化进行简要介绍和制定学习计划. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注!

Android实战技巧之十七:Linux下的模拟器硬件加速

Intel提供了一个叫HAXM的虚拟硬件加速技术,全称为:Intel Hardware Accelerated Execution Manager. 只要你的CPU是intel的产品并且支持VT(virtualization Technology)就可以使用HAXM技术将你的模拟器的速度提升至真机的水平.目前此技术支持苹果的Mac系统和Windows系统,但Linux平台不在此列. 要知道Android的编译环境Google首推Linux平台(64位的Ubuntu)而Mac系统排到第二位.那么在