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:
-
È un codice annidato e non è abbastanza facile da leggere. Sì, potrebbe essere semplificato con Lambdas, ma avrebbe ancora molte parti annidate.
-
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?