Object Sharing zwischen Aktivitäten in Android
Hi Ich habe eine Frage zum Weitergeben eines Objekts in der gesamten App. Angenommen, ich möchte ein großes benutzerdefiniertes Objekt in der gesamten App haben. Dieses Objekt wird von mehreren Aktivitäten und Diensten verwendet. Was ich zuerst getan habe, ist das.
Zunächst habe ich eine Application-Klasse erstellt und ein Singleton-Objekt definiert.
public class FooApplication extends Application {
public static SharedObj obj;
...
}
Second, in einer Aktivität habe ich einen Wert für dieses Objekt gesetzt
public class FooActivity extends Activity {
OnCreate() {
FooApplication.obj = SharedObj.getInstance();
}
}
Drittens, in einer anderen Aktivität greife ich auf dieses Objekt zu
public class BarActivity extends Activity {
OnCreate() {
SharedObj useThis = FooApplication.obj;
}
}
Meine Frage ist, was ist daran falsch? Es scheint gut zu funktionieren, aber ich finde, dass manchmal der Wert dieses Singleton-Objekts aus irgendeinem Grund auf null gesetzt wird. Der Hauptgrund, warum ich dieses Objekt auf diese Weise teile, anstatt es paketfähig zu machen, ist, dass dies für mich ziemlich teuer ist und das, was ich getan habe, sehr einfach zu tun scheint. Gibt es einen Nachteil?
Nach einigen Recherchen habe ich herausgefunden, dass es eine andere Möglichkeit gibt, ein Objekt in der gesamten App zu teilen.
Zunächst in der App-Klasse definieren
public class FooApplication extends Application {
public SharedObj obj = new SharedObj();
...
}
Second, initialisiere in einer Aktivität wie dieser
public class FooActivity extends Activity {
OnCreate() {
FooApplication fooApp = (FooApplication)getApplicationContext();
fooApp.obj = new SharedObj();
}
}
Drittens, in einer anderen Aktivität greife ich auf dieses Objekt zu
public class BarActivity extends Activity {
OnCreate() {
SharedObj useThis = ((FooApplication)getApplicationContext()).obj;
}
}
Wie unterscheidet sich diese Methode (mit getapplicationContext ()) von der Verwendung eines Singleton-Objekts, wie ich es im ersten Abschnitt getan habe? Ist das mehr zu empfehlen?
Danke im Voraus