【问题标题】:Should I use sync adapter我应该使用同步适配器吗
【发布时间】:2015-10-15 13:33:48
【问题描述】:

我的应用要求

登录。

注册。

每隔 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

【问题讨论】:

    标签: android android-syncadapter


    【解决方案1】:

    同步适配器设计为在关闭时间运行,以使本地和服务器之间的数据保持最新。不定期,当然也不是每分钟。

    您可能应该只实现一个计时器或处理程序来控制它。

    类似于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);
    }
    

    【讨论】:

    • 我认为 GCMnetworkManager 会是一个更好的用例?
    • 你不需要这么大的东西,比如简单的箱子。 GCM 主要用于服务器发送推送消息。如果您每分钟轮询一次,则 Handler 是您最轻量级的实现。
    【解决方案2】:

    正如官方文档所说

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

    我建议您在需要定期更新时使用 SyncAdapter,即使用户不使用该应用也是如此。 SyncAdapter的主要优点是即使你不使用应用程序也可以通过Android系统进行切换。因此,当用户进入应用程序时,他总是拥有实际数据。如果您没有本地数据库并且只需要定期更新,请改用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 2012-01-05
      • 2020-03-17
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      相关资源
      最近更新 更多