목차
Hot Observable의 응용
Connectable Observable
-publish
-refCount
-share
-replay
-autoConnect
과제
예제 만들기
위 그림과 같이 만들어보자
xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="<http://schemas.android.com/apk/res/android>"
xmlns:app="<http://schemas.android.com/apk/res-auto>"
xmlns:tools="<http://schemas.android.com/tools>"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_connect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="connect"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_dispose"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="dispose"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_connect" />
<TextView
android:id="@+id/tv_observable3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="text3 observable"
app:layout_constraintBottom_toBottomOf="@id/btn_subscribe3"
app:layout_constraintEnd_toStartOf="@id/btn_subscribe3"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/btn_subscribe3" />
<Button
android:id="@+id/btn_subscribe3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="subscribe"
app:layout_constraintBottom_toTopOf="@id/btn_connect"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tv_observable3" />
<TextView
android:id="@+id/tv_observable2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="text2 observable"
app:layout_constraintBottom_toBottomOf="@id/btn_subscribe2"
app:layout_constraintEnd_toStartOf="@id/btn_subscribe2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/btn_subscribe2" />
<Button
android:id="@+id/btn_subscribe2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="subscribe"
app:layout_constraintBottom_toTopOf="@id/btn_subscribe3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tv_observable2" />
<TextView
android:id="@+id/tv_observable1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="text2 observable"
app:layout_constraintBottom_toBottomOf="@id/btn_subscribe1"
app:layout_constraintEnd_toStartOf="@id/btn_subscribe1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/btn_subscribe1" />
<Button
android:id="@+id/btn_subscribe1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="subscribe"
app:layout_constraintBottom_toTopOf="@id/btn_subscribe2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tv_observable1" />
</androidx.constraintlayout.widget.ConstraintLayout>
Main
private val compositeDisposable = CompositeDisposable()
private val publishObservable = Observable.interval(0, 1, TimeUnit.SECONDS)
.map { seconds ->
val minutes = TimeUnit.SECONDS.toMinutes(seconds)
val seconds = seconds % TimeUnit.MINUTES.toSeconds(1)
String.format("%02d:%02d", minutes, seconds)
}
전역변수에 선언하고