我的应用要求
登录。
注册。
以1分钟的周期间隔从服务器获取数据并更新UI。
没有本地数据库。
对于登录和注册我将使用普通的HTTP调用,但是对于定期请求,间隔1分钟,我正在考虑使用SyncAdapter,
我应该使用SyncAdapter吗?即使我没有本地数据库存储。
是否可以从SyncAdapter更新UI?
我已经通过以下链接 How do I use the Android SyncAdapter?
答案 0 :(得分:2)
同步适配器旨在在关闭时运行,以使本地和服务器之间的数据保持最新。不经常,当然也不是每一分钟。
你应该只是实现一个Timer或Handler来控制它。
与this answer类似的东西。
private int mInterval = 60000; // 60 seconds
private Handler mHandler;
@Override
protected void onCreate(Bundle bundle) {
...
mHandler = new Handler();
startRepeatingTask();
}
Runnable mStatusChecker = new Runnable() {
@Override
public void run() {
downloadChangesFromServer();
mHandler.postDelayed(mStatusChecker, mInterval);
}
};
void startRepeatingTask() {
mStatusChecker.run();
}
void stopRepeatingTask() {
mHandler.removeCallbacks(mStatusChecker);
}
答案 1 :(得分:2)
正如官方文件所说
应用中的同步适配器组件封装了代码 在设备和服务器之间传输数据的任务。基于 您在应用中提供的计划和触发器,即同步适配器 framework运行同步适配器组件中的代码。
我建议您在需要定期更新时使用SyncAdapter,即使用户未使用该应用也是如此。即使您不使用该应用程序,也可以通过Android系统切换SyncAdapter的主要优势。因此,当用户输入应用程序时,他总是拥有实际数据。如果您没有本地数据库,只需要定期更新,请使用Handler。
int updatePeriod = 60*1000;// one minute in milliseconds
mHandler = new Handler();
mRunnable = new Runnable(){
@Override
public void run() {
//update request here
mHandler.postDelayed(mRunnable, updatePeriod );
}
};
mRunnable.run(); // missing
此代码每分钟运行run()。将更新逻辑添加到run方法。此外,如果您每分钟都要请求服务器数据,那么您只会浪费设备电池。如果您想了解有关使用网络的更多信息,请查看此视频https://www.youtube.com/watch?v=l5mE3Tpjejs