Можно ли синхронизировать Android AsyncTask doInBackground для сериализации выполнения задачи?

Можно ли сделать AsyncTask.doInBackgroundсинхронизировано - или добиться того же результата другим способом?

class SynchronizedTask extends AsyncTask {

    @Override
    protected synchronized Integer doInBackground(Object... params) {
        // do something that needs to be completed 
        // before another doInBackground can be called
    }
}

В моем случае любая AsyncTask.execute()может быть запущена до завершения предыдущей, но мне нужно выполнить код в doInBackgroundтолько после завершения предыдущей задачи. законченный.

РЕДАКТИРОВАТЬ: Как правильно указано, синхронизация работает только с одним и тем же экземпляром объекта. К сожалению, невозможно создать AsyncTaskи вызвать execute()более одного раза для одного и того же экземпляра объекта, как указано в разделе «Правила многопоточности» документа . Документация по AsyncTask.

Решение состоит в том, чтобы использовать пользовательский Executorдля сериализации задач или, если вы используете API 11 или выше,AsyncTask.executeOnExecutor(), как предлагается в комментариях ниже. .

Я опубликовал ответ, показывающий реализацию SerialExecutor, которую можно использовать для постановки в очередь задач, которые будут выполняться последовательно.

8
задан Community 23 May 2017 в 11:54
поделиться