在IntentService中执行多个查询

时间:2015-05-11 13:51:46

标签: android intentservice

我有一个使用改造执行web服务调用的IntentService,然后在成功时将执行响应(查询集)。 webservice调用正在成功完成并且一切正常,但在执行查询时,UI会在执行完成时冻结然后继续。

意图服务不应该在后台执行任务而不影响UI吗?

代码简化:

@Override
public void success(Response iu, Response response) {
    //get respose (set of queires then loop over them and execute them.
    for (int i = 0; i < contentArray.length; i++) {
        String query = contentArray[i];
        MainActivity.myDataBase.execSQL(query);
}  //the amount of queries can reach 100

如果您想发布更多代码,我会

1 个答案:

答案 0 :(得分:6)

您似乎正在使用Retrofit进行Web服务调用,特别是使用Retrofit CallbackCallback是专为您从主应用程序线程启动查询并且您希望将结果传递到主应用程序线程(例如,更新UI)的情况而设计的。

在你的情况下,这些都不是真的。

相反,删除Callback并使用Retrofit的同步API。所以,而不是像:

@GET("/group/{id}/users")
void groupList(@Path("id") int groupId, Callback<List<User>> callback);

使用类似的东西:

@GET("/group/{id}/users")
List<User> groupList(@Path("id") int groupId);

这样,结果将在您同步的同一个线程上传递给您,并确保您在数据库I / O的后台线程上。

顺便说一句,如果您还没有这样做,请考虑在事务中包装这些数据库调用 - 执行约100个单独的事务可能会有点慢。