У меня есть этот код для выполнения асинхронного вызова в фоновом режиме, отображения индикатора выполнения и запуска другого действия при нажатии кнопки:
@Override
protected void onCreate(Bundle savedInstanceState) {
// ....
actionButton.setOnClickListener(this);
// call action here
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.actionButton) {
setProgressVisibility(VISIBLE);
new MyActivity.ActionTask().execute(action);
}
}
private void getAction(Action action) {
try {
Call<Action> getAction = api.callAction(model, action);
Response<Action> response = getAction.execute();
setProgressVisibility(INVISIBLE);
if (response.isSuccessful() && response.body() != null) {
startAction(response.body());
} else {
runOnUiThread(() -> showToast(R.string.error, this));
logger.error(getResources().getString(R.string.error));
}
} catch (IOException e) {
runOnUiThread(() -> showToast(e.getMessage(), this));
logger.error(e.getMessage());
setProgressVisibility(INVISIBLE);
}
}
private void startAction(Action action) {
Intent intent = new Intent(this, ActionActivity.class);
intent.putExtra("action", action);
startActivity(intent);
}
private class ActionTask extends AsyncTask<Action, Void, Action> {
@Override
protected Action doInBackground(Action... action) {
getAction(action[0]);
return action[0];
}
}
Я хотел бы начать асинхронный вызов, как толькопервое действие отображается в OnCreate, чтобы оно выглядело быстрее для пользователя, когда он нажимает кнопку.Таким образом, асинхронный вызов начинается, как только действие создано, затем, когда пользователь нажимает кнопку, если результат уже доступен, начинается следующее действие, в противном случае индикатор выполнения отображается до тех пор, пока результат не станет доступен, и как только результат будет готов,вторая деятельность начинается.Какой лучший способ сделать это?