- RxJava Wiki Home
- RxAndroid Wiki Home
- rxmarbles
- https://github.com/xiaomeixw/NoRxJava
- RxJava , RxAndroid 사용하기[1 : 흐름 파악하기]
- 1. RxAndroid를 적용해보고 HelloWorld를 찍어보자.
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 |