Wie Sie die RecyclerView Dataset
aus dem Hintergrund-Service aktualisieren. Der Dienst unterhält eine Socket-Verbindung mit dem Server, und wenn der Server mit Daten antwortet, muss service
dies in der Recycler-Ansicht (dh in der MainActivity) aktualisieren.Update `RecyclerView` Datensatz von einem Service
Antwort
Es gibt viele Möglichkeiten, ein Ereignis von Serivce an Activity zu senden.
Ich empfehle Ihnen den folgenden Weg.
Bind und Rückrufe
Ich denke, dass Bind und Rückrufe offizielle Weg ist.
Communication between Activity and Service
Example: Communication between Activity and Service using Messaging
EventBus
Ich denke, dass EventBus einfacher Weg ist.
https://github.com/greenrobot/EventBus
In Aktivität (oder wo):
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
@Override
protected void onResume() {
super.onResume();
BusHolder.getInstnace().register(this);
}
@Override
protected void onPause() {
super.onPause();
BusHolder.getInstnace().unregister(this);
}
@Subscribe
public void onDatasetUpdated(DataSetUpdatedEvent event) {
//Update RecyclerView
}
}
BusHolder hält BusEvent Beispiel:
public class BusHolder {
private static EventBus eventBus;
public static EventBus getInstnace() {
if (eventBus == null) {
eventBus = new EventBus();
}
return eventBus;
}
private BusHolder() {
}
}
Die Veranstaltung gepostet:
public class DataSetUpdatedEvent {
//It is better to use database and share the key of record of database.
//But for simplicity, I share the dataset directly.
List<Data> dataset;
public DataSetUpdatedEvent(List<Data> dataset) {
this.dataset = dataset;
}
}
Nachricht von Ihrem Service .
BusHolder.getInstnace().post(new DataSetUpdatedEvent(dataset));
Ich hoffe, das hilft.
Möglicherweise sollten Sie einige Datenbank wie Ding verwenden, um temporäre Daten zu speichern, weil ich nicht denke, dass es eine gute Sache ist, Daten in einem Objekt im Auftrag der Servicekomponente zu speichern. Es wäre überflüssig, ganze Listendaten im Objekt zu speichern, egal ob der Benutzer zur App zurückkehrt oder ob das Objekt den Speicher abdeckt, was wir während des gesamten Entwicklungsprozesses vermeiden sollten. Viel Glück.
für Chat-ähnliche Anwendungen gibt es keine Notwendigkeit, Daten auf dem Gerät zu speichern – injecteer
Der Dienst fügt auch die Daten in den SQLite-Server (von Android) und Updates in der Recyclerview zu. –
Spezifische, zeigen Sie Ihre Versuche, das Problem zu lösen – injecteer