Isso se enquadra no básico da comunicação de protocolo. Uma transação foi solicitada pelo cliente Android e o servidor deve realizar a transação. Se a transação depende da confirmação do cliente Android, isso é chamada de comunicação ACK / NAK.
ACK (confirmação) e NAK (confirmação negativa) são usados para informar o outro lado do resultado de uma solicitação.
O que você está perguntando é sobre um tipo de troca de handshaking entre o cliente e o servidor e pode ser realizada com uma troca básica de ACK / NAK.
Aqui está um exemplo do Android fazendo upload de um arquivo com reconhecimento bidirecional.
Android -> upload files -> Server
Android <- ACK #id <- Server
Android -> ACK #id -> Server
No exemplo acima, adicionei um #id
identificador exclusivo para a transação. O servidor deve receber os arquivos, criar um registro de transação e enviá-lo como resposta de volta ao Android. O Android deve seguir com um reconhecimento dessa transação (ou, alternativamente, um NAK para uma rejeição).
Aqui está um exemplo de um Android desconectado durante o aperto de mão.
Android -> upload files -> Server
Android <- ACK #id <- Server
/** no ACK response **/
No exemplo acima, o servidor aceitou os arquivos enviados e enviou uma #id
resposta ACK de volta ao Android, mas o Android nunca responde com uma ACK. O dispositivo Android falhou ao concluir o handshake. Cabe a você decidir como o servidor deve lidar com isso. Destrua a transação, mantenha a transação e aguarde o dispositivo Android retornar mais tarde ou conclua a transação de qualquer maneira.
O servidor pode assumir que, uma vez que o dispositivo não respondeu com o ACK. Que o dispositivo Android não atualizou seu estado interno para indicar que o upload foi bem-sucedido. Eu descartaria a transação e permitiria que o dispositivo a repetisse no futuro.