Domanda

Anche con una connessione di rete scarsa?

Nello specifico, ho scritto un codice che avvia un thread separato (dall'interfaccia utente) che tenta di caricare un file tramite HTTP POST.Ho scoperto, tuttavia, che se la connessione è difettosa, il processore si blocca su outputstream.close() o httpconnection.getheaderfield() o su qualsiasi lettura/scrittura che forza i dati sulla rete.Ciò non solo causa il blocco del thread, ma ruba l'intero processore, quindi anche l'interfaccia utente non risponde.

Ho provato ad abbassare la priorità del thread, senza alcun risultato.

La mia teoria è che non esiste un modo semplice per evitare questo comportamento, motivo per cui tutti i tutorial di j2me istruiscono gli sviluppatori a creare una schermata di "invio di dati sulla rete...", invece di inviare semplicemente tutto in un thread in background.Se qualcuno potesse dimostrarmi che sbaglio, sarebbe fantastico.

Grazie!

È stato utile?

Soluzione

Un aspetto importante è è necessario disporre di un generico utente o uno schermo che può essere visualizzato quando la chiamata di rete in background non riesce. E 'praticamente un must su qualsiasi applicazione per cellulare, J2ME o in altro modo.

Come ha detto Honza, che dipende dal disegno, ci sono così tante cose che si possono fare, come i dati di pre-fetching all'avvio dell'app, o dati pre-fetching basati sulla schermata che viene caricato (ovvero il percorso di navigazione), o avere un set di dati di default costruito in app, ecc.

Un'altra cosa che si può provare è un meccanismo incorporato timer che ritenta il download dei dati dopo un certo periodo di tempo, e di abortire dopo 5 tentativi dire o 1-2 minuti e la visualizzazione di messaggio di schermo o di errore generico.

Alcuni telefoni in J2ME consentono di individuare la modalità aereo, se possibile, è possibile rilevare che e prontamente visualizzare una schermata appropriata.

Anche un disegno che ha funzionato per me è la sincronizzazione di interfaccia utente e di rete fili, in modo che essi non lock-up tra loro (prendi questo po 'di consigli con forte dose di sale come ho avuto un bel paio di bug interessanti su alcuni Samsung e SANYO cellulari a causa di questo)

Tutto sommato buona risposta per voi, ma strategie diverse.

Altri suggerimenti

E 'più o meno dipende da come si scrive il codice e dove lo si esegue. Sul CLDC il concetto di filettatura è piuttosto limitato e se qualsiasi thread sta facendo qualche operazione duraturo altri thread potrebbe essere (e sono solitamente i) bloccato da esso pure. Si dovrebbe prendere in considerazione quando si progetta l'applicazione.

Puoi dividere i dati del file in blocchi e quindi caricarli con più tentativi in ​​caso di errore.Questo dipende dalla strategia applicativa.Se la tua priorità è caricare dati in blocco senza errori.È necessario assemblare i blocchi sul server per ricostruire i dati.Ciò potrebbe comportare un sovraccarico per effettuare connessioni, ma è alta la possibilità che i tuoi dati vengano caricati.Se non stai caricando file contemporaneamente, funzionerà facilmente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top