Domanda

Ho una classe che recupera i dati in risposta alla pressione dei pulsanti nell'attività principale. Purtroppo, io continuo a incorrere in problemi, perché questa classe non è un'attività o un servizio. Ad esempio, senza un contesto non riesco a tradurre un ID di risorsa in una stringa:

getString(R.string.example_string); // Doesn't work

Devo fare questa classe in un servizio e hanno la fermata principale attività della classe quando è chiuso? Dovrei passare il contesto dal Activity in questa classe come questo?

MyClass c = new MyClass(this);

O c'è qualche modo migliore per gestire questo problema?

Il problema è disponibile anche quando provo a trasmettere un Toast da questa classe.

Aggiornamento: Erich e Janusz me indicato nella direzione della classe AsyncTask che funziona perfettamente, se non che crea un nuovo thread e non uccide mai quel filo. Ciò significa che il tempo sempre l'utente preme un tasto, si aggiunge un altro thread e quelle vecchie semplicemente seduti lì.

È stato utile?

Soluzione

Se avete un atto bianco il cui ciclo di vita è disaccoppiato dalla vostra attività, vorrei usare una Service. In tal caso, il Service avrà la propria Context, quindi non sarà necessario passare in. Se, tuttavia, è necessario eseguire un'azione di fondo in risposta a un evento utente (ed eventualmente inviare i risultati indietro nella UI filo), mi sento di raccomandare di utilizzare un AsyncTask.

Altri suggerimenti

Sono d'accordo con Erich, se avete solo un qualcosa di piccolo come la pubblicazione di un cambiamento per un backend web o di carico qualcosa dalla memoria del telefono per mostrare su schermo l'uso di una asincrono Task . Se l'attività uscirà molto "veloce" (alcuni secondi) è possibile effettuare una classe anonima all'interno della vostra attività. Questo vi permetterà di utilizzare un riferimento implicito all'attività esterna all'interno del compito e si può ottenere il contesto da lì.

Se l'operazione è in corsa per un tempo più lungo si può tramandare il contesto. Se si passa lungo il contesto cercare di non passare questo dall'utilizzo di attività this.getApplicationContext () questo sarà ridurre al minimo il numero di riferimenti alla vostra attività e consentire il garbage collector per ripulire correttamente.

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