Come evitare i thread annidati?

0

Spesso ho una situazione in cui prima devo fare qualcosa nel thread dell'interfaccia utente (Android in questo caso), poi in qualche networkstuff in un thread aggiuntivo, tornare al thread dell'interfaccia utente e udire il layout, ecc.

Questo sembra il più delle volte in questo modo:

MainActivity.getActivity().runOnUiThread(new Runnable(){
    @Override
    public void run{
        //Some code here
        new Thread(new Runnable(){
            @Override
            public void run(){
                //Even more code
                MainActivity.runOnUiThread(...);
            }
        }).start();
    }
});

Penso che questo non sia ottimale in due modi:

  1. È un codice annidato e non è abbastanza facile da leggere. Sì, potrebbe essere semplificato con Lambdas, ma avrebbe ancora molte parti annidate.

  2. Il codice dell'interfaccia utente viene eseguito su un solo thread, quello fornito dal sistema. Per il thread di rete, per ogni parte viene avviato un nuovo thread. È male per le prestazioni.

Come posso migliorare questo?

    
posta Namnodorel 14.07.2016 - 12:19
fonte

1 risposta

2

Su Android puoi usare AsyncTask (l'equivalente di SwingWorker).

Ha 3 metodi che puoi sovrascrivere,

  • doInBackground per il lavoro che vuoi fare nel thread in background,
  • onPostExecute chiamato sul thread dell'interfaccia utente con il valore restituito di doInBackground dopo il suo ritorno, e
  • onProgressUpdate ha anche chiamato il thread dell'interfaccia utente in risposta alle chiamate a publishProgress .
risposta data 14.07.2016 - 14:49
fonte

Leggi altre domande sui tag