ide/androidstudio

RxAndroid

C/H 2017. 1. 3. 08:30

RxJava

RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.
RxJava는 Reactive Extensions : 관찰 가능한 시퀀스를 사용하여 비동기 및 이벤트 기반 프로그램을 작성하기위한 라이브러리 인 Java VM 구현입니다.

It extends the observer pattern to support sequences of data/events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety and concurrent data structures.
관측자 패턴을 확장하여 데이터 / 이벤트의 시퀀스를 지원하고 선언적으로 함께 시퀀스를 작성하고 저레벨 스레딩, 동기화, 스레드 안전성 및 동시 데이터 구조와 같은 사항에 대한 염려를 추상화 할 수있는 연산자를 추가합니다.

  • 제로 의존성
  • < 1MB Jar
  • Java 6 이상 및 Android 2.3 이상
  • 자바 8 람다 지원
  • 다각형 (Scala, Groovy, Clojure 및 Kotlin)
  • 동시성 (스레드, 풀, 이벤트 루프, 파이버, 액터 등)의 근원에 대해 비판적입니다.
  • 비동기 또는 동기 실행
  • 매개 변수화 된 동시성을위한 가상 시간 및 스케줄러

RxAndroid

Ovservable 생성, call 익명 함수에서 Next , Completed 를 호출
Subscriber onNext, onCompleted에서 위 Next, Completed를 구독 실행한다.

RxAndoird Extention

    RxLifecycle
    Lifecycle handling APIs for Android apps using RxJava
    RxJava를 사용하는 Android 앱용 라이프 사이클 처리 API
    RxBinding
    RxJava binding APIs for Android's UI widgets.
    Android UI 위젯 용 RxJava 바인딩 API
    SqlBrite
    A lightweight wrapper around SQLiteOpenHelper and ContentResolver whidd introduces reactive stream semantics to queries.
    reactive stream semantics to queries를 도입 SQLiteOpenHelper와 ContentResolver 가볍게 래핑한 라이브러리.
    Android-ReactiveLocation
    Library that wraps location play servic API boilerplate with a reactive friendly API. (RxJava 1)
    위치 재생 서비스 API를 래핑하는 라이브러리. (RxJava 1)
    RxLocation
    Reactive Location APIs Library for Android. (RxJava 2)
    Android 용 Reactive Location API 라이브러리. (RxJava 2)
    rx-preferences
    Reactive SharedPreferences for Android
    Android 용 Reactive SharedPreferences
    RxFit
    Reactive Fitness API Library for Android
    Android 용 Reactive Fitness API 라이브러리
    RxWear
    Reactive Wearable API Library for Android
    Android 용 Reactive Wearable API 라이브러리
    RxPermissions
    Android runtime permissions powered by RxJava
    RxJava가 제공하는 Android 런타임 권한
    RxNotification
    Easy way to register, remove and manage notifications usidd RxJava
    쉽게 알림 등록, 제거 및 관리하는 usidd RxJava
    RxClipboard
    RxJava binding APIs for Android clipboard.
    Android 클립 보드 용 RxJava binding API.
    RxBroadcast
    RxJava bindings for Broadcast add LocalBroadcast
    RxJava bindings는 Broadcast에 LocalBroadcast를 추가한 버전.
    RxAndroidBle
    Reactive library for handling Bluetooth LE devices.
    Bluetooth LE 장치를 처리하기위한 Reactive 라이브러리.

build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'me.tatarka:gradle-retrolambda:3.3.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}


apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.1'
    }
    defaultConfig {
        applicationId "kr.step1.testrxandroidliefcycle"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        jackOptions {
            enabled true    // 별로 권하고 싶지 않다. 제한조건이 답답하다.
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.1.0'
    testCompile 'junit:junit:4.12'
    //compile 'io.reactivex:rxandroid:1.2.1'
    //compile 'io.reactivex:rxjava:1.2.4'
    //compile 'com.trello:rxlifecycle:1.0'
    //compile 'com.trello:rxlifecycle-components:1.0'
    compile 'com.trello.rxlifecycle2:rxlifecycle-android:2.0.1' // 이거 한개로 가능
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="kr.step1.testrxandroidliefcycle.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:id="@+id/textView" />
</RelativeLayout>

MainActivity.java

package kr.domain.testrxandroidliefcycle;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.trello.rxlifecycle.components.support.RxAppCompatActivity;

import rx.Observable;
import rx.Subscriber;

public class MainActivity extends RxAppCompatActivity {

    public static final String TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 발행
        Observable<string> simpleObservable =
                Observable.create(new Observable.OnSubscribe<string>() {
                    @Override
                    public void call(Subscriber<? super String> subscriber) {
                        subscriber.onNext("Hello RxAndroid LifeCycle !!");
                        subscriber.onCompleted();
                    }
                })
                // `this.<string>` is necessary if you're compiling on JDK7 or below.
                //
                // If you're using JDK8+, then you can safely remove
                .compose(this.<string>bindToLifecycle());
                //.compose(this.<string>bindUntilEvent(ActivityEvent.DESTROY));
                // RxLifeCycle 를 이용 메모리 누수 해결

        // 구독
        simpleObservable.subscribe(new Subscriber<string>() {
            @Override
            public void onCompleted() {
                Log.d(TAG, "complete!");
            }

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

            @Override
            public void onNext(String text) {
                ((TextView) findViewById(R.id.textView)).setText(text);
            }
        });
    }
}

Observable operators Method

    just( )
    convert an object or several objects into an Observable that emits that object or those objects
    객체 또는 여러 객체를 해당 객체 또는 객체를 방출하는 Observable로 변환
    from( )
    convert an Iterable, a Future, or an Array into an Observable
    Iterable, Future 또는 Array를 Observable로 변환
    repeat( )
    create an Observable that emits a particular item or sequence of items repeatedly
    특정 항목이나 일련의 항목을 반복해서 내보내는 Observable을 만든다.
    repeatWhen( )
    create an Observable that emits a particular item or sequence of items repeatedly, depending on the emissions of a second Observable
    두 번째 Observable의 배출량에 따라 반복적으로 특정 항목이나 일련의 항목을 반복적으로 방출하는 Observable을 만든다.
    create( )
    create an Observable from scratch by means of a function
    함수를 통해 Observable을 처음부터 생성
    defer( )
    do not create the Observable until a Subscriber subscribes; create a fresh Observable on each subscription
    구독자가 구독 할 때까지 Observable을 만들지 마십시오. 각 구독마다 새로운 Observable 생성
    range( )
    create an Observable that emits a range of sequential integers
    일련의 정수를 내보내는 Observable을 만든다.
    interval( )
    create an Observable that emits a sequence of integers spaced by a given time interval
    지정된 시간 간격만큼 간격을 둔 일련의 정수를 방출하는 Observable을 작성.
    timer( )
    create an Observable that emits a single item after a given delay
    주어진 시간 지연 후에 하나의 항목을 방출하는 Observable을 생성
    empty( )
    create an Observable that emits nothing and then completes
    Observable을 생성, 아무 것도 출력하지 않고 완료
    error( )
    create an Observable that emits nothing and then signals an error
    Observable 생성, 아무 것도 출력하지 않고 오류 신호를 보낸다.
    never( )
    create an Observable that emits nothing at all
    아무 것도 보내지 않는 Observable를 만든다.
Observable
    .just("Hello RxAndroid !!")
    .compose(this.<String>bindToLifecycle())
    .subscribe(new Action1<String>() {
        @Override
        public void call(String s) {
            ((TextView) findViewById(R.id.textview)).setText(s);
        }
    });


반응형

'ide > androidstudio' 카테고리의 다른 글

Android Design Support Library  (0) 2017.01.05
Lamda 사용을 위한 Android Studio JDK8 Jack 설정  (0) 2017.01.04
ReactivceX, RxAndroid  (0) 2017.01.02
okhttp3  (0) 2016.12.28
Android Networking Connect  (0) 2016.12.27