我是android开发的新手。我正在开发一个应用程序,我需要每15分钟更新一次数据。如果一个活动正在运行,同时数据由后端更新,那么活动也应该更新,如果应用程序关闭,则应显示通知。
我正在使用改装来消耗后端Apis。是否有任何计时器功能可用于定期使用改装命中API?
当我搜索我的问题时,我发现它可以通过带有BroadcastReceiver或firebase jobDispatcher的AlarmManager完成,我很高兴知道是否有更多方法。
最好和最简单的方法是什么?
答案 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()
中可观察的数据。