2016-08-30 6 views
0

Ich erstelle die App mit einem Vordergrund-Service. Der Dienst wird in einem anderen Prozess und Thread ausgeführt.Anwendungsvariablen im Service

Die Application-Klasse hat ein Array und die öffentliche Methode getArray. Der Dienst kann auf die Anwendung und die Aufrufmethode getArray zugreifen.

App gestartet, Array-Füllung und Service gestartet. Wenn die App das Array ändert, gibt der Dienst das bei der Start-App erstellte Array zurück.

Wie kann ich das Array im Dienst aktualisieren?

auf Service:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    if(mThread != null) 
     mThread.interrupt(); 
    mApplication = (Application) getApplication(); 
    mTaskManager = mApplication.getTaskManager(); 

    TaskArray lTasks = mTaskManager.getAll(); 

    // always return same size 
    Log.d(mLogTag, "onStartCommand " + lTasks.size()); 

    createThread(); 

    mThread.start(); 
    super.onStartCommand(intent, flags, startId); 
    return START_STICKY; 
} 

ERGEBNIS:

ich den Grund des Erhaltens einer Kopie applicaton Objekt in meiner app gefunden wurde. Dies geschieht, weil getApplicationContext() den Kontext des einzelnen globalen Anwendungsobjekts des aktuellen Prozesses zurückgibt.

Für jeden Prozess erstellt eine Kopie des Anwendungsobjekts.

+0

Also Ihre Frage ist, wie Sie Arraylist Werte vom Dienst aktualisieren können? –

+0

Sie können eine Zwei-Wege-Kommunikation zwischen Client-App und Remote-Service mit Messenger –

+0

Piyush Kukadiya haben, was meinst du mit Messenger? –

Antwort

1

den Kontext der Anwendungsklasse Erhalten Sie mithilfe von getApplicatonContext() in der Serviceklasse, indem er diese Zeile ((YourApplicatonClassName) getApplicationContext()). GetArray() und stellen Sie den neuen Datenwert. Es ist besser, wenn möglich, Ihren Code zu teilen, damit ich verstehe, was Sie genau wollen. Danke

+0

Ich mache das, aber die Methode getArray gibt mir das alte Array zurück. Wie beim Starten des Dienstes erstellt es eine Kopie der Anwendungsklasse. –

+0

Dann denke ich, Sie sollten SetArrayValue() -Methode, ein Setter, und setzen Sie neue Werte, nachdem Array mit alten Werten gelöscht. – LUshPUsh

+0

Danke, ich werde das versuchen, aber ich möchte verstehen, warum es eine Kopie erstellt, und wie es im Inneren funktioniert. –