2017-05-03 99 views
0

測試在Android 6.0.1三星S6邊緣+ RxJava可觀察到的問題

當設備屏幕處於脫機狀態,並且已從電源調試,可觀察到的只是停止發射項目。如果設備打開,對象開始被髮射。 另一個問題是,randomically停止reciving項目之前,我得到2/3重複調用在同一項目

Observable.interval(4000, 
      30000, TimeUnit.MILLISECONDS) 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .doOnError(ErrorResponse.handleError()).subscribe(new Action1() { 
         @Override 
         public void call(Object o) { 
          statusSender.doNetworkCallAndGetStringResult(); 
         } 
        }); 

__________________________________EDIT__________________________________

做另一篇文章的順序透露更多的細節。我不能給你完整的日誌,但我會盡力解釋我已經做了什麼來確保問題是可觀察的。

以下

https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java

我tryed不同的實現與Rxjava2

isposables.add(statusSender.getObservable(certificate) 
        .subscribeOn(io.reactivex.schedulers.Schedulers.io()) 
        .observeOn(io.reactivex.android.schedulers.AndroidSchedulers.mainThread()) 
        .subscribeWith(getObserver())) 

getObservable方法

return io.reactivex.Observable.interval(INITIAL_DELAY,Utilities.getInstance().getHeartbeatFrequency(),TimeUnit.MILLISECONDS); 

getObserver方法是asExample有區別,我做在我的網絡電話onNext

private DisposableObserver<Long> getObserver() { 
    return new DisposableObserver<Long>() { 

     @Override 
     public void onNext(Long value) { 
      Log.d(TAG, " onNext : value : " + value); 
      statusSender.doNetworkCallAndGetStringResult(); 
     } 

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

     @Override 
     public void onComplete() { 
      Log.d(TAG, " onComplete"); 
     } 
    }; 
} 

日誌發生了什麼

Log

+0

你的用戶是做什麼的?你在哪裏取消訂閱/再次訂閱這個可觀察的?在停止接收物品之前,你的意思是什麼? – yosriz

+0

對不起,我沒有給出所有的信息。我的用戶發送一個ping到遠程服務器讓服務器知道設備是活着的。我的意思是服務器 – Federik

+0

上的「接收項目」是否Observable不發射項目或服務器沒有ping通?重複調用也是如此,Observable是否發出重複項目或服務器是否收到重複項目? – yosriz

回答

0

當設備屏幕處於脫機狀態,並且已從電源調試的,可觀察到的只是停止發射項目。

這是Android上的預期行爲:設備將暫停您的活動並切換到低功耗模式以節省電量。如果您需要在後臺執行某些操作,您將需要創建服務,通過Android特定定時器請求喚醒,並要求獲得特殊許可才能將設備保留在清單中(我想,這已經有一段時間了) 。

+0

觀察員在服務內註冊 – Federik

+0

這還不夠 - 請參閱https://developer.android.com/training/monitoring-device-state/doze-standby.html –