2015-10-15 55 views
2

我的应用程序要求我应该使用同步适配器

登录。

注册。

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

没有本地数据库。

用于登录,注册,我将使用正常的HTTP调用,但是在一个分钟时间我想用SyncAdapter,定期要求

我应该使用SyncAdapter这?,连我都没有本地DB存储器。

是否有可能从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

回答

1

同步适配器设计为在截止时间运行,以保持本地和服务器之间的数据电流。不是经常的,当然不是每分钟。

你应该实现一个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); 
} 
+0

我认为GCMnetworkManager将是一个更好的用例? – Naga

+1

你不需要像例如简单的案例这么大的东西。 GCM主要用于服务器发送推送消息。如果您每分钟轮询一次,Handler是您最轻量级的实现。 – Knossos

2

作为官方文件说

在您的应用程序同步适配器组件封装为设备和服务器之间传输数据的 任务的代码。根据您在应用中提供的 调度和触发器,同步适配器 框架将运行同步适配器组件中的代码。

我建议你在需要定期更新时使用SyncAdapter,即使用户不使用该应用。 SyncAdapter的主要优势在于,即使您不使用该应用程序,它也可以通过Android系统进行切换。所以当用户进入应用程序时,他总是有实际的数据。如果您没有本地数据库,只需要定期更新,请使用处理程序。

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()。将更新逻辑添加到运行方法。此外,如果您每分钟都要请求服务器数据,则只会浪费设备电池。如果你想在网络工作的更多信息检查这个视频https://www.youtube.com/watch?v=l5mE3Tpjejs