События клика в очереди, когда поток пользовательского интерфейса заблокирован. В случае нажатия кнопки, как можно скорее переключитесь на фоновую задачу, чтобы избежать событий щелчка, стоящих в очереди друг за другом.
Объявите логически изменяемый логический элемент или блокировку внутри класса активности:
private volatile boolean saving = false;
Создайте кнопку с помощью onClickListener, который будет закрыт путем сохранения, и запустите фоновую задачу для выполнения работы:
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!saving) {
saving = true;
new SaveAsyncTask().execute();
}
}
});
Создайте внутренний класс SaveAsyncTask для работы в фоновом режиме:
class SaveAsyncTask extends AsyncTask {
@Override
protected Object doInBackground(Object[] objects) {
// Do something here, simulate a 3 second task
SystemClock.sleep(3000);
saving = false;
return null;
}
}