我有一个静态的方法来做一个网络"沉重的"请致电此getDataFromCloudServer()
。现在将组成一种具有这种方法的新的手工实用方法
示例:
public static void periodicUpdate(Context ctx) {
clearCachedData();
List<Object> newData = getDataFromCloudServer(ctx);
persist(newData);
}
当UI线程上的事件发生时,需要触发这个新的方便方法。但显然我无法通过UI线程调用它 因此,我希望避免向我认为的调用者提供小的匿名AsyncTasks:
public static void periodicUpdateInAsyncTask(final Context ctx) {
AsyncTask<Void, Void, Void> updaterTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
periodicUpdate(ctx);
}
};
updaterTask.execute();
}
我担心这是不是一个好主意。基本上我认为AsyncTask不是&#34;控制&#34; /取消等。
这里有什么问题,我怎么能正确写出来?
答案 0 :(得分:0)
我认为AsyncTask不是“受控”/取消等等。
实际上,AsyncTask的开发人员要遵守取消状态。
AsyncTask与其流程的生命周期相关联。因此,您可能会遇到一些问题,例如内存泄漏(您通过静态声明解决了这些问题),但请记住,使用后台进程时,priority list for killing中的内存较低。如果您对使用服务不满意。
如果你想与Activity的生命周期联系起来,请使用AsyncTaskLoader。
如果您不打算在UI线程中发布结果,则可以使用标准java线程。
对于在数据库中使用缓存结果的网络内容,我会使用服务。