我应该使用同步适配器吗?

时间:2015-10-15 13:33:48

标签: android android-syncadapter

我的应用要求

登录。

注册。

以1分钟的周期间隔从服务器获取数据并更新UI。

没有本地数据库。

对于登录和注册我将使用普通的HTTP调用,但是对于定期请求,间隔1分钟,我正在考虑使用SyncAdapter,

我应该使用SyncAdapter吗?即使我没有本地数据库存储。

是否可以从SyncAdapter更新UI?

我已经通过以下链接 How do I use the Android SyncAdapter?

Sync data between Android App and webserver

Android SyncAdapter use case

Sync data between Android App and webserver

2 个答案:

答案 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