在 IntentService 中执行多个查询

Executing Multiple Queries In IntentService

我有一个 IntentService,它使用改造执行 Web 服务调用,然后在成功时执行响应(查询集)。 网络服务调用成功,一切都很好,但是在执行查询时,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

如果您想 post 更多代码,我会

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

在你的情况下,none 是正确的。

相反,删除 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 个单独的事务可能会有点慢。