In Android, alcuni codici, come l'aggiornamento dei pulsanti dell'interfaccia utente, devono essere richiamati nel thread dell'interfaccia utente, tuttavia, prima dell'aggiornamento dell'interfaccia utente, alcune attività, come ottenere la risposta da internet, devono essere eseguite su un altro thread, qui è il la forma più comune di callback di risposta vedo:
public void httpResponseCallback(String responseString){
MyFragment.this.getActivity().runOnUiThread(new Runnable(){
@Override
public void run(){
if(responseString==null || responseString.isEmpty()){
showErrorDialog();
}else{
List<String> nameList=this.parse(responseString);
if(nameList==null){
showErrorDialog();
}else{
updateUI(nameList);
}
}
}
});
}
Ma penso che questo callback non sia abbastanza buono, perché alcuni codici non richiedono di essere inseriti all'interno di runOnUiThread, quindi penso che la seguente forma sia migliore:
public void httpResponseCallback(String responseString){
if(responseString==null || responseString.isEmpty()){
MyFragment.this.getActivity().runOnUiThread(new Runnable(){
@Override
public void run(){
showErrorDialog();
}
});
}else{
final List<String> nameList=this.parse(responseString);
if(nameList==null){
MyFragment.this.getActivity().runOnUiThread(new Runnable(){
@Override
public void run(){
showErrorDialog();
}
});
}else{
MyFragment.this.getActivity().runOnUiThread(new Runnable(){
@Override
public void run(){
updateUI(nameList);
}
}
}
}
Dopo il refactoring, all'inizio, penso che sarebbe più logico perché:
- Riduce il carico di lavoro non necessario sul thread dell'interfaccia utente
- Fornisce suggerimenti agli altri membri del team su quali funzioni o codici devono essere eseguiti sul thread dell'interfaccia utente
Ma più tardi, quando ho letto di nuovo il codice, ho trovato che il codice è molto più lungo di quello originale a causa di runOnUiThread extra da digitare, quindi la mia domanda è, è il wrapping di tutti i codici in runOnUiThread meglio di usare runOnUiThread solo sul codice relativo all'interfaccia utente ?