Sto cercando di ristrutturare un progetto per rendere i componenti riutilizzabili e più chiari.
Considera il seguente scenario:
A WakefulBroadcastReceiver (nel mio caso chiamato SimpleWakefulReceiver ) avvierà il mio LocationService. Una volta ricevuta una nuova correzione GPS, il client dovrebbe trasmetterla a un server e la risposta del server dovrebbe essere mostrata all'utente.
Tentativo di implementazione:
Ho due altre classi:
-
HttpManager
-
NotificationManager
La LocationService
crea un riferimento anonimo e chiama un metodo come questo:
new HttpManager(this).sendGps(longitude, latitude, accuracy, utcTime);
Il costruttore della classe HttpManager
public HttpManager(Context context)
{
this.context = context;
}
Dopo aver ricevuto una risposta dal server, faccio praticamente lo stesso di sopra all'interno della classe HttpManager:
new NotificationManager(context).sendNotificationToUser(resultData);
Il problema:
Quando il lavoro è terminato, si è verificato un errore o altre condizioni, il WakeLock
deve essere rilasciato e il servizio deve essere arrestato.
Perciò spesso chiamo i metodi
-
context.stopService(new Intent(context, LocationService.class));
-
SimpleWakefulReceiver.completeWakefulIntent(new Intent(context, LocationService.class));
all'interno della NotificationManager
e della HttpManager
class che sembra un odore di codice.
Sto cercando una struttura in cui non devo chiamare spesso questi metodi. Inoltre, non sono sicuro che sia molto elegante con questi riferimenti anonimi o magari implementando un ResultReceiver
o IntentService
sarebbe il modo migliore.
Domanda
- Come posso strutturare il progetto per rimuovere questo odore di codice?