1. 程式人生 > >王學崗RxJava(十二)————————interval,timer,取消Observable

王學崗RxJava(十二)————————interval,timer,取消Observable

package com.example.acer.rxjavatest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import java.util.concurrent.TimeUnit;

import rx.Observable;
import rx.Observer;

public class MainActivity extends AppCompatActivity {
private Observable<Long> mObservable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //兩個引數: //第一個引數:代表兩個訊息傳送之間的間隔時間(輪訓時間) //第二個引數:時間單位:(毫秒,秒,分鐘) TimeUtil時間工具類
mObservable = Observable.interval(2, TimeUnit.SECONDS); } //按鈕的單擊事件 public void click(View v) { //輪訓通知觀察者 mObservable.subscribe(new Observer<Long>() { @Override public void onCompleted() { } @Override public
void onError(Throwable e) { } @Override public void onNext(Long aLong) { Log.i("zhang_xin", aLong + ""); } }); } }

看下列印結果,這裡寫圖片描述
大家看這裡的列印結果可能看不出來,這個輪訓是無限次輪訓,我在寫這篇部落格的時候,剛才執行的程式已經輪訓到504了!

如何指定輪訓的次數,我還沒搞定。

這個方法時八秒後輪訓,輪訓的間隔時間是一秒
mObservable = Observable.interval(8,1,TimeUnit.SECONDS);

輪訓一次的寫法

package com.example.acer.rxjavatest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import java.util.concurrent.TimeUnit;

import rx.Observable;
import rx.Observer;

public class MainActivity extends AppCompatActivity {


    private Observable<Long> mObservable;

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

        //兩個引數:
        //第一個引數:代表兩個訊息傳送之間的間隔時間(輪訓時間)
        //第二個引數:輪訓的次數
        //第三引數:時間單位:(毫秒,秒,分鐘) TimeUtil時間工具類
        mObservable = Observable.timer(8 ,TimeUnit.SECONDS);
    }

    //按鈕的單擊事件
    public void click(View v) {
        mObservable.subscribe(new Observer<Long>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Long aLong) {
                Log.i("zhang_xin", aLong + "");
            }
        });
    }


}

這裡寫圖片描述

//取消訂閱的方法

package com.example.acer.rxjavatest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import java.util.concurrent.TimeUnit;

import rx.Observable;
import rx.Observer;
import rx.Subscription;

public class MainActivity extends AppCompatActivity {


    private Observable<Long> mObservable;

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

        //兩個引數:
        //第一個引數:代表兩個訊息傳送之間的間隔時間(輪訓時間)
        //第二個引數:輪訓的次數
        //第三引數:時間單位:(毫秒,秒,分鐘) TimeUtil時間工具類
        mObservable = Observable.interval(8,1,TimeUnit.SECONDS);
    }

    //按鈕的單擊事件
    public void click(View v) {
       Subscription ms= mObservable.subscribe(new Observer<Long>() {
            @Override
            public void onCompleted() {
                Log.i("zhang_xin",  " onCompleted");
            }

            @Override
            public void onError(Throwable e) {
                Log.i("zhang_xin",e + "");
            }

            @Override
            public void onNext(Long aLong) {
                Log.i("zhang_xin", aLong + " n");
            }
        });
        //取消訂閱
        ms.isUnsubscribed();
    }


}