반응형
공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
안드로이드에서 주기적으로 실행하는 동작을 구현할 때 일반적으로
Timer 클래스나 Handler 클래스를 사용합니다.
Timer
schedule()을 이용해서 지연시간을 설정하거나, 특정 시간에 특정 동작을
실행할 수도 있고, 고정된 시간을 설정해서 동작을 반복실행할 수도 있습니다.
Handler
postDelayed() 로 지연시간 설정이나 반복 실행 구현 가능
Timer 사용 예제
package park.sunggyun.thomas.rxandroidex;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.widget.TextView;
import com.trello.rxlifecycle2.components.support.RxAppCompatActivity;
import java.util.Timer;
import java.util.TimerTask;
public class TimerExActivity extends RxAppCompatActivity {
private static final int DELAY = 0;
private static final int PERIOD = 1000;
private Timer timer = new Timer();
private int count = 0;
TextView textView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timerex);
textView = findViewById(R.id.textView);
startTimer();
}
public void startTimer() {
timer.schedule(new TimerTask() {
@Override
public void run() {
count++;
runOnUiThread(() -> {
textView.setText("실행한 횟수 : " + count);
if(count == 20) {
stopTimer();
finish();
}
});
}
}, DELAY, PERIOD);
}
public void stopTimer() {
timer.cancel();
}
}
1초마다 textView 를 갱신하는 예제입니다.
Timer 클래스를 사용할 때
정확한 시간마다 반복할 경우
scheduleAtFixedRate(TimerTask task, long delay, long period)를 사용하면 되고,
얼추 일정시간마다 반복할 경우
schedule(TimerTask, long delay, long period) 를 사용하면 됩니다.
만약 실행횟수를 제한해야 할 경우에는
CountDownTimer 클래스를 사용합니다.
package park.sunggyun.thomas.rxandroidex;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.annotation.Nullable;
import android.widget.TextView;
import com.trello.rxlifecycle2.components.support.RxAppCompatActivity;
public class TimerExActivity extends RxAppCompatActivity {
private static final int COUNT_TIME = 10 * 1000; //밀리초단위
private static final int INTERVAL = 1000;
CountDownTimer countDownTimer;
TextView textView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timerex);
textView = findViewById(R.id.textView);
init();
}
private void init() {
countDownTimer = new CountDownTimer(COUNT_TIME, INTERVAL) {
@Override
public void onTick(long millisUntilFinished) {
textView.setText(String.valueOf(millisUntilFinished));
}
@Override
public void onFinish() {
finish();
}
};
countDownTimer.start();
}
}
Timer 예제를 RxAndroid를 적용해 바꾸기
package park.sunggyun.thomas.rxandroidex;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.widget.TextView;
import com.trello.rxlifecycle2.components.support.RxAppCompatActivity;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
public class TimerExActivity extends RxAppCompatActivity {
TextView textView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timerex);
textView = findViewById(R.id.textView);
init();
}
private void init() {
Observable<String> src = Observable.interval(1, TimeUnit.SECONDS)
.flatMap(s -> Observable.just("RxAndroid Example #1 : " + s));
src.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(textView::setText);
}
/*private void init2() {
Observable<String> src2 = Observable.just("RxAndroid Example #1 :")
.repeatWhen(s -> s.delay(1, TimeUnit.SECONDS));
src2.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(textView::setText);
}*/
}
init() 과 init2()를 번갈아 주석을 풀어가며 예제를 실행해보시면 되겠습니다.
이상입니다.
다음 포스팅에서는 RxAndroid를 활용한 네트워크 프로그래밍에 대해 공부합니다.
반응형
'RxJava2, RxAndroid2' 카테고리의 다른 글
[RxJava2] RxJava 에서의 디버깅 : doOnNext(), doOnComplete(), doOnError(), doOnEach(), doOnSubscribe(), doOnDispose(), etc. (0) | 2018.10.11 |
---|---|
[RxAndroid2] 메모리 누수를 잡아보자. Disposable, RxLifeCycle, CompositeDisposable (0) | 2018.10.10 |
[RxAndroid2] RxAndroid로 안드로이드 스레드 대체하기. AndroidSchedulers.mainThread() (2) | 2018.10.10 |
[RxAndroid2] 스마트폰에 설치된 앱 목록 보기 (0) | 2018.10.10 |
[RxAndroid2] RxAndroid 란? (0) | 2018.10.05 |