Qual è il modo corretto di avere una richiamata attiva in qualsiasi momento?

1

Abbiamo un'app per Android. L'app per Android utilizza Volley ( link ) per trasmettere dati di rete.

Il punto però non riguarda Volley, riguarda il modello utilizzato da Volley per eseguire una chiamata remota. Esempio:

final TextView mTextView = (TextView) findViewById(R.id.text);
...

// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.google.com";

// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        // Display the first 500 characters of the response string.
        mTextView.setText("Response is: "+ response.substring(0,500));
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        mTextView.setText("That didn't work!");
    }
});
// Add the request to the RequestQueue.
queue.add(stringRequest);

Come ho detto, il punto non è su Volley ma sul modello. Creo una nuova richiesta, inserisco il callback e quando la chiamata termina, la funzione di callback aggiorna l'interfaccia utente.

Davvero semplice.

Ora, diciamo che l'utente continua a fare clic sul pulsante dannato, potrei generare un sacco di chiamate. Vorrei evitarlo.

Una soluzione, supponendo che non vi siano problemi di concorrenza poiché fare clic sui pulsanti è seriale, sarebbe quella di passare attorno a una variabile boolean che verrà reimpostata su true al termine della richiamata.

Non mi piace questa soluzione perché ha accoppiato molto le cose.

Ovviamente questo codice è molto semplice, in produzione potresti avere una struttura di classe più complessa.

Quale pensi potrebbe essere una soluzione migliore?

    
posta dierre 29.07.2016 - 10:30
fonte

1 risposta

1

Un singolo utente non genera molte chiamate anche quando fa febbrilmente clic su un pulsante che non risponde. Tuttavia, il sistema operativo può essere sottoposto a backup e quindi scaricare un sacco di clic su tutti voi in una volta.

Piuttosto che passare intorno a boolean , segnerei la data e l'ora della richiesta. Se questa richiesta è identica a quella da, oh, a meno di 300 ms, basta scaricare la richiesta prima di aggiungerla alla coda.

Gli utenti sarebbero difficili da notare e questo garantisce non più di 4 richieste identiche al secondo.

Anche con questo, non ignorare la mancanza di responsabilità che sta causando agli utenti di fare clic freneticamente. Questo indica che è ora di iniziare a testare i problemi di prestazioni e vedere se possono essere risolti.

    
risposta data 29.07.2016 - 12:53
fonte

Leggi altre domande sui tag