ich mit einigen JAVA Theorie Hilfe benötigen ...Synchronisierte Methoden und statischen Variablen Zugriff JAVA/ANDROID
So, dass ich vor kurzem entdeckt, wenn eine App verwendet mehrere Threads, und es gibt eine Möglichkeit, von verschiedenen Threads den gleichen gemeinsamen Zugriff Variable zur gleichen Zeit, dann sollte man "synchronisierte" Methoden verwenden, um die Variable zu erhalten/setzen.
Also ... in meiner App (Location Aware) habe ich Variablen LAT und LON, die zu MainActivity gehören und statisch sind. Sie werden aus Hintergrunddienste zugegriffen wie so:
appendToPOST(MainActivity.LAT);
Und in MainActivity selbst, ich bin mit Google Play Ortungsdienste und so in der OnLocationChanged() Callback-Methode in MainActivity, ich habe:
LAT = [arbitrary Double value goes here];
So also
, bedeutet, dass ich umsetzen sollte:
public static synchronized void setLAT(Double inLAT){
LAT = inLAT;
}
public static synchronized void setLON(Double inLON){
LON = inLON;
}
public static synchronized Double getLAT(){
return LAT;
}
public static synchronized Double getLON(){
return LON;
}
Richtige? Danke für jede Klärung/Hilfe.
Hinzugefügt: Sollte ich den Code in der onLocationChanged() - Methode ändern, um die synchronisierten Methoden zu verwenden, obwohl es in derselben Klasse wie die Variable existiert?
in der grundlegenden Weise sind Sie richtig, aber 'multitThreading' haben großes Thema, da Sie "synchronisierte" Methoden in Ihrem Fall haben (alle Methoden), den Sie in [DeadLock] (http://www.javaworld.com /article/2075692/java-concurrency/avoid-synchronization-deadlocks.html) – Hosseini
@Hosseini-Deadlocks sollten im angegebenen Beispiel kein Problem darstellen, da es nur ein Sperrobjekt namens 'MainActivity' gibt. Entweder ein Thread enthält dieses Sperrobjekt oder nicht. Wenn es jedoch andere Klassen gibt, die die Synchronisation auch mit anderen Sperrobjekten verwenden, sind Deadlocks definitiv eine wichtige zu beachtende Sache. Als Faustregel kann man sagen: Wenn Ihr Code mehrere verschiedene Sperrobjekte verwendet, müssen diese Objekte ** immer ** in der gleichen Reihenfolge akquiriert werden. Leider ist es nicht immer so einfach, diese Regel zu erfüllen ... – dpr
Wir sehen hier keine Sache anstelle von 'Getter/Setter', wir sagen nur, das ist nicht jedes Mal, wenn wir" State "schützen müssen synchronisiert ". – Hosseini