Wie kann ich eine globale Variable erstellen? Behalten Sie die Werte im gesamten Lebenszyklus der Anwendung bei, unabhängig davon, welche Aktivität ausgeführt wird.
android
global-variables
D-Mann
quelle
quelle
Antworten:
Sie können die Basisklasse erweitern
android.app.Application
und Elementvariablen wie folgt hinzufügen:In Ihrem Android-Manifest müssen Sie die Klasse deklarieren, die android.app.Application implementiert (fügen Sie das
android:name=".MyApplication"
Attribut dem vorhandenen Anwendungs-Tag hinzu):Dann können Sie in Ihren Aktivitäten die Variable wie folgt abrufen und einstellen:
quelle
Sie können Folgendes verwenden
Singleton Pattern
:In Ihrer Anwendung können Sie auf folgende Weise auf Ihren Singleton zugreifen:
quelle
Diese globale Variable funktioniert für mein Projekt:
quelle
Sie können Anwendungseinstellungen verwenden. Sie können von jeder Aktivität oder jedem Code aus aufgerufen werden, solange Sie das Context-Objekt weitergeben, und sie sind für die Anwendung, die sie verwendet, privat. Sie müssen sich also keine Gedanken über die Offenlegung anwendungsspezifischer Werte machen, es sei denn, Sie befassen sich mit Routing Geräte. Trotzdem können Sie Hashing- oder Verschlüsselungsschemata verwenden, um die Werte zu speichern. Diese Einstellungen werden auch von einem Anwendungslauf zum nächsten gespeichert. Hier sind einige Codebeispiele, die Sie sich ansehen können.
quelle
Es gibt verschiedene Möglichkeiten, wie Sie das erreichen können, wonach Sie fragen.
1.) Erweitern Sie die Anwendungsklasse und instanziieren Sie dort Ihre Controller- und Modellobjekte.
Dann können Sie Ihren Singleton jederzeit von Ihrem benutzerdefinierten Anwendungsobjekt aus aufrufen:
2.) Sie können Ihren Controller einfach eine Singleton-Instanz von sich selbst erstellen lassen:
Dann können Sie die create-Methode einfach aus einer beliebigen Aktivität oder einem beliebigen Fragment aufrufen und einen neuen Controller erstellen, falls noch keiner vorhanden ist. Andernfalls wird der bereits vorhandene Controller zurückgegeben.
3.) Schließlich gibt es bei Square ein schickes Framework, das Ihnen die Abhängigkeitsinjektion in Android ermöglicht. Es heißt Dolch . Ich werde hier nicht darauf eingehen, wie man es benutzt, aber es ist sehr schlau, wenn man so etwas braucht.
Ich hoffe, ich habe genug Details angegeben, wie Sie das tun können, was Sie sich erhoffen.
quelle
Versuchen Sie es wie folgt:
Erstellen Sie eine gemeinsam genutzte Datenklasse:
SharedData.java
Deklariert / initiiert eine Instanz einer Klasse global in den Klassen, in denen Sie Daten festlegen / abrufen möchten (unter Verwendung dieses Codes vor der
onCreate()
Methode): -Daten einstellen:
Daten empfangen:
quelle
Sie können Folgendes erstellen
Global Class
:Dann definieren Sie es im Manifest:
Jetzt können Sie Werte wie folgt auf eine globale Variable setzen:
Sie können diese Werte wie folgt erhalten:
Ein vollständiges Beispiel finden Sie in diesem Blog Global Variables
quelle
quelle
Ich habe nach einer ähnlichen Antwort gesucht, aber die hier angegebenen entsprechen nicht meinen Anforderungen. Ich finde etwas, das aus meiner Sicht das ist, wonach Sie suchen. Der einzig mögliche schwarze Punkt ist eine Sicherheitsfrage (oder vielleicht auch nicht), da ich nichts über Sicherheit weiß.
Ich schlage vor, Interface zu verwenden (Klasse muss nicht mit Konstruktor verwendet werden und so ...), da Sie nur Folgendes erstellen müssen:
Dann können Sie überall in Ihren Klassen auf Folgendes zugreifen:
quelle
Technisch beantwortet dies die Frage nicht, aber ich würde empfehlen, die Raumdatenbank anstelle einer globalen Variablen zu verwenden. https://developer.android.com/topic/libraries/architecture/room.html Auch wenn Sie "nur" eine globale Variable speichern müssen und es keine große Sache ist und was nicht, ist die Verwendung der Room-Datenbank die eleganteste , native und gut unterstützte Methode, um Werte über den Lebenszyklus der Aktivität zu erhalten. Dies hilft, viele Probleme zu vermeiden, insbesondere die Integrität von Daten. Ich verstehe, dass Datenbank und globale Variable unterschiedlich sind, aber bitte verwenden Sie Room aus Gründen der Code-Wartung, App-Stabilität und Datenintegrität.
quelle
Verwenden Sie SharedPreferences, um globale Variablen zu speichern und abzurufen.
quelle
Wenn möglich, sollten Sie die Variablen deklarieren, die Sie am Leben erhalten müssen, die von Garbage Collector nicht gelöscht oder von OS in Datei .so entladen wurden. Dazu müssen Sie mit C / C ++ codieren und in die Datei .so lib und kompilieren Laden Sie es in Ihre MainActivity.
quelle
static
Variablen.quelle
Einfach!!!!
Diese Variablen, auf die Sie als globale Variable zugreifen möchten, können Sie als statische Variablen deklarieren. Und jetzt können Sie mit auf diese Variablen zugreifen
classname.variablename;
}}
MyProperites.someValueIWantToKeep;
Das ist es! ;)
quelle
synchronized
für die Statik verwendet wird,getInstance()
während andere dies nicht tun. entsprechend abgestimmt.