Ciao, il problema è quello descritto correttamente (come sempre!) da andbin.
In Android così come in tanti altri ambienti, tutte le operazioni vengono eseguite su un unico thread, salvo andare a crearne manualmente di nuovi. Dato che le operazioni di rete sono tendenzialmente molto lente, il rischio è quello di bloccare questo thread, con la conseguenza che l'applicazione sembra essere bloccata (cioè non risponde agli input) finché quest'operazione non termina. Da Android 3.0 in poi, quindi, si è forzato l'utilizzo di un thread differente per queste operazioni di rete. Tuttavia Android ha semplificato un po' la vita agli sviluppatori introducendo nuove API apposite, come ad esempio la classe
AsyncTask