È necessario utilizzare un servizio Bound. Ho fatto qualcosa di simile nella mia domanda. Quando, dopo aver fatto clic su Aggiorna, invoco un servizio che ottiene i dati in background e aggiorna l'interfaccia utente.
controllare il mio servizio qui: https://github.com/madhur/GAnalytics/blob/develop/src/in/co/madhur/ganalyticsdashclock/AnalyticsDataService.java
@Override
protected void onPostExecute(AnalyticsAccountResult result) {
super.onPostExecute(result);
App.getEventBus().post(result);
}
attività: https://github.com/madhur/GAnalytics/blob/develop/src/in/co/madhur/ganalyticsdashclock/MainActivity.java
@Subscribe
public void UpdateUI(AnalyticsAccountResult result) {
ProgressBar progressbar = (ProgressBar) findViewById(R.id.pbHeaderProgress);
LinearLayout spinnerLayout = (LinearLayout) findViewById(R.id.spinnerslayout);
TextView statusMessage = (TextView) findViewById(R.id.statusMessage);
switch (result.getStatus()) {
case STARTING:
statusMessage.setVisibility(View.GONE);
progressbar.setVisibility(View.VISIBLE);
spinnerLayout.setVisibility(View.GONE);
break;
case FAILURE:
statusMessage.setVisibility(View.VISIBLE);
progressbar.setVisibility(View.GONE);
spinnerLayout.setVisibility(View.GONE);
statusMessage.setText(result.getErrorMessage());
break;
case SUCCESS:
statusMessage.setVisibility(View.GONE);
progressbar.setVisibility(View.GONE);
spinnerLayout.setVisibility(View.VISIBLE);
if (result.getItems() != null)
{
this.acProfiles = result.getItems();
MyAdapter myAdapter = new MyAdapter(acProfiles, this);
listView.setAdapter(myAdapter);
UpdateSelectionPreferences();
if (result.isPersist() && acProfiles.size() > 0)
{
if (App.LOCAL_LOGV)
Log.v(App.TAG, "saving configdata");
try
{
appPreferences.saveConfigData(acProfiles, credential.getSelectedAccountName());
}
catch (JsonProcessingException e)
{
Log.e(App.TAG, e.getMessage());
}
}
}
break;
}
}
Sarebbe anche utile usare Otto libreria:
http://square.github.io/otto/
fonte
2013-12-09 05:08:38
Grazie per la risposta, .. In realtà hai ragione. Ma la mia domanda è: come faccio a sapere che il set di dati è cambiato dalla mia attività ... Come dovrei essere intimato dal mio servizio? – GaneshKumar
Non ho dovuto farlo personalmente, quindi non posso dire con certezza quale metodo sia il migliore, ma penso che un [BroadcastReceiver] (http://developer.android.com/reference/android/content/BroadcastReceiver.html) Lavoro per te. È una classe astratta in grado di gestire i messaggi trasmessi da un servizio. Il servizio utilizzerà il metodo sendBroadcast() quando trova una nuova stringa e la tua attività verrà registrata come BroadcastReciever che eseguirà un'azione quando viene ricevuta una trasmissione. – csmckelvey