试图决定使用哪种方法连接到Web服务的Android

时间:2013-12-20 05:21:47

标签: java android multithreading web-services

我在这个网站上看过几篇文章,还有几本关于Handlers,Threads,HandlerThreads,Services,SyncAdapters,ContentProviders等等的书籍。似乎有很多不同的选择,我不知道哪个适合我的项目。

我有一个简单的项目,当应用程序第一次启动时,它将连接到一个简单的REST Web服务。它将下载一些JSON数据并在列表中显示。然后,用户可以编辑该数据,并且在点击“保存”之后,应用程序将向具有更新数据的Web服务发送POST。用户还可以手动发起“同步”,这将检查任何新数据。最后,应用程序应定期检查Web服务以查看是否有更多数据。

我从一个内容提供商开始,但它似乎真的有点过分(而且复杂),因为我确信它最终会起作用。然后我尝试了一个Thread,但Android建议使用AsyncTask或Handlers。我一直在玩它们(把它们放在服务中),两者都会做我想要的(使用计时器每隔X分钟启动一次同步)但我不知道这是否是处理这个问题的最佳方法。我很担心,因为这个项目可能会增加更多,我不想选择一个限制我未来的选项,但我也不想投入大量的时间来做一些过度杀伤的事情。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

让我们从整体保持简单范式开始吧。

AsyncTask会是这样的:

public class MyAsyncTask extends AsyncTask<Void, Void, Data> {

   public interface OnDone {
      public void onDone(Data data);
   }

   private final OnDone mDone;

   public MyAsyncTask(OnDone onDone) {
      mDone = onDone;
   }

   public Data doInBackground(Void v) {
      // Download and parse your JSON in the background
   }

   public void onPostExecute(Data data) {
        mOnDone.onDone(data);
   }

}

public class OnDoneImpl .... implements OnDone, Runnable {

    ...
    // Just need a context in scope some how, an activity, the application whatever.
    Context mContext;

    public void onDone(Data data) {
        updateList(data);
        scheduleAgainInXMinutes(TIME_TILL_REFRESH);
    }

    public void scheduleAgainInXMinutes(long millis) {
        // probably want to use an Alarm service but can always use a handler;
        new Handler().postDelayed(this, millis);   
    }

    public void run() {
          new MyAsyncTask(this).execute();
    }
}