小背景任务的选项

时间:2016-04-23 17:45:04

标签: java android multithreading concurrency android-asynctask

我有一个静态的方法来做一个网络"沉重的"请致电此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; /取消等。
这里有什么问题,我怎么能正确写出来?

1 个答案:

答案 0 :(得分:0)

  

我认为AsyncTask不是“受控”/取消等等。

实际上,AsyncTask的开发人员要遵守取消状态。

AsyncTask与其流程的生命周期相关联。因此,您可能会遇到一些问题,例如内存泄漏(您通过静态声明解决了这些问题),但请记住,使用后台进程时,priority list for killing中的内存较低。如果您对使用服务不满意。

如果你想与Activity的生命周期联系起来,请使用AsyncTaskLoader。

如果您不打算在UI线程中发布结果,则可以使用标准java线程。

对于在数据库中使用缓存结果的网络内容,我会使用服务。