在 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 Callback
。 Callback
专为以下情况而设计:您从主应用程序线程启动查询,并且希望将结果传送到主应用程序线程(例如,更新 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 个单独的事务可能会有点慢。
我有一个 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 Callback
。 Callback
专为以下情况而设计:您从主应用程序线程启动查询,并且希望将结果传送到主应用程序线程(例如,更新 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 个单独的事务可能会有点慢。