Android:如何在固定的时间间隔后刷新背景?

时间:2017-06-10 19:15:10

标签: android retrofit2

我是android开发的新手。我正在开发一个应用程序,我需要每15分钟更新一次数据。如果一个活动正在运行,同时数据由后端更新,那么活动也应该更新,如果应用程序关闭,则应显示通知。

我正在使用改装来消耗后端Apis。是否有任何计时器功能可用于定期使用改装命中API?

当我搜索我的问题时,我发现它可以通过带有BroadcastReceiver或firebase jobDispatcher的AlarmManager完成,我很高兴知道是否有更多方法。

最好和最简单的方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以像这样使用TimerTask类:

 Timer timer = new Timer();
 TimerTask timerTask = new TimerTask() {
    public void run() {
       //Hit your api from here
    }
};
timer.scheduleAtFixedRate(timerTask, 0, 15000);

要取消此操作,只需致电:

if (timer!=null){
    timer.cancel();
    timerTask.cancel();
}

希望这有帮助。

答案 1 :(得分:0)

这是我使用Retrofit2实施定期更新的方法。我正在使用Retrofit2和RxJava2。不知道这是否是最简单的方法。至少对我有用。

首先,创建Retrofit服务,然后获取可观察到的数据。

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("YOUR_BASE_URL")
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .build();

    MyRetrofitService request = retrofit.create(MyRetrofiService.class);

    Observable<MyData> myDataObservable = request.getMyData();

第二,创建观察者以处理可观察的数据。

    observer = new DisposableObserver<MyData>() {

        @Override
        public void onNext(MyData myData) {
            // do your work here: handle your data, update UI, ..., etc.
        }

        @Override
        public void onError(Throwable e) {
            e.printStackTrace();
        }

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

现在,创建另一个可观察的对象以进行定期更新。这是每x秒重复的一次。关键是使用flapMap()将周期可观测数据映射到可观测数据。

    Observable.interval(x, TimeUnit.SECONDS)
            .flatMap(new Function<Long, Observable<MyData>>() {
                @Override
                public Observable<MyData> apply(Long aLong) throws Exception {
                    return myDataObservable;
                }
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(observer);

最后一步是通过调用onDestroy()来清理observer.dispose()中可观察的数据。