我在这个网站上看过几篇文章,还有几本关于Handlers,Threads,HandlerThreads,Services,SyncAdapters,ContentProviders等等的书籍。似乎有很多不同的选择,我不知道哪个适合我的项目。
我有一个简单的项目,当应用程序第一次启动时,它将连接到一个简单的REST Web服务。它将下载一些JSON数据并在列表中显示。然后,用户可以编辑该数据,并且在点击“保存”之后,应用程序将向具有更新数据的Web服务发送POST。用户还可以手动发起“同步”,这将检查任何新数据。最后,应用程序应定期检查Web服务以查看是否有更多数据。
我从一个内容提供商开始,但它似乎真的有点过分(而且复杂),因为我确信它最终会起作用。然后我尝试了一个Thread,但Android建议使用AsyncTask或Handlers。我一直在玩它们(把它们放在服务中),两者都会做我想要的(使用计时器每隔X分钟启动一次同步)但我不知道这是否是处理这个问题的最佳方法。我很担心,因为这个项目可能会增加更多,我不想选择一个限制我未来的选项,但我也不想投入大量的时间来做一些过度杀伤的事情。
有人可以帮忙吗?
答案 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();
}
}