3
Android的意圖服務的工作請求我已經創建了一個IntentService如下:平行運行
public class OrdersSyncService extends IntentService {
private static final String TAG = OrdersSyncService.class.getSimpleName();
private Order orderObject;
public OrdersSyncService() {
super("OrdersSyncService");
}
@Override
protected void onHandleIntent(Intent intent) {
//Util.showToast(getApplicationContext(), "Syncing Orders........");
Log.d(TAG, "I'm running....");
syncOrders();
}
private void syncOrders() {
Database database = CouchBaseHelper.openCouchBaseDB(this);
JSONArray ordersJsonArray = new JSONArray(CouchBaseHelper.retrieveNotSyncedOrders(database));
if (ordersJsonArray.length() != 0) {
uploadOrders(ordersJsonArray.toString());
Log.d(TAG, "Orders syncing started.");
} else {
Log.d(TAG, "Nothing to sync.");
}
}
private void uploadOrders(String ordersJsonArray) {
RetrofitApi.ApiInterface apiInterface = RetrofitApi.getApiInterfaceInstance();
final Call<Order> uploadOrders = apiInterface.uploadOrders(
ordersJsonArray,
Util.getDeviceId(this),
AppPreference.getString(this, AppPreference.USER_ID)
);
uploadOrders.enqueue(new Callback<Order>() {
@Override
public void onResponse(Call<Order> call, Response<Order> response) {
if (response.isSuccessful()) {
if (response.body().getStatus().equals("success")) {
orderObject = response.body();
Log.d(TAG, "Server Response : " + orderObject.getMobileOrderIds());
boolean flag = updateOrders(orderObject);
if (flag) {
Log.d(TAG, "Orders Synced And Updated.");
EventBus.getDefault().post(new SyncFinished(true));
} else {
Log.d(TAG, "Orders Synced But Update Failed.");
}
} else {
Log.d(TAG, response.body().getMessage());
}
} else {
Log.d(TAG, "Some Error. Sync Failed.");
}
}
@Override
public void onFailure(Call<Order> call, Throwable t) {
Log.d(TAG, "Network problem. Sync Failed.");
//Log.d("VICKY",call.request().url().toString());
}
});
}
private boolean updateOrders(Order order) {
Database database = CouchBaseHelper.openCouchBaseDB(this);
boolean flag = CouchBaseHelper.updateOrders(database, order);
return flag;
}
}
它是什麼,它使一個網絡請求和網絡請求後,更新數據庫(I」 m使用couchbaselite for android)與響應。現在問題在於,當我向它發出多個請求時,它的執行是並行的。 Android文檔明確指出: Creating a Background Service
工作請求按順序運行。如果某個操作正在IntentService中運行,並且您發送了另一個請求,則請求會等待,直到第一個操作完成。
我從一個活動的onResume
方法調用此服務。因此,每當活動恢復時,此服務被稱爲:
@Override
protected void onResume() {
super.onResume();
Intent ordersSyncServiceIntent = new Intent(SellerHomeActivity.this, OrdersSyncService.class);
startService(ordersSyncServiceIntent);
}
我不知道問題是什麼。我認爲它與Retrofit
庫有關,用於創建異步的網絡請求。請幫忙。
好的,我知道我在做異步,但究竟是什麼導致我的IntentService並行運行?你能否詳細說明一下。 – Vicky
@Vicky,您正在IntentService的另一個線程中產生工作。 IntentService運行,讓我們說線程4,並且您正在線程上運行您的網絡調用讓我們說6。因此,您不使用IntentService類。在這種情況下,您可以使用服務。 – azizbekian
@azizbekian,我明白了,我在IntentService中創建了另一個線程,但是'Retrofit'中的'Callback'應該在IntentService線程上執行,對吧? – Vicky