2016-04-30 6 views
1

Ich verwende statische Variable in einer Klasse in Android:Halten Sie statische Variablen für einen längeren Zeitraum - Android

class Test{ 
    static int x; 
} 

Diese Variablen gelöscht werden, wenn die Klasse entladen wird oder wenn die VM anhält.

Ich muss diese Variable für einen längeren Zeitraum beibehalten, aber SharedPreferences oder einen permanenten Speicher kann ich nicht verwenden, da die Informationen in diesem statischen Feld empfindlich sind und nicht in einem zugänglichen Speicher gespeichert werden sollten.

Irgendwelche Vorschläge?

Edit:

Wie der Android-Dienst im Hintergrund ausgeführt wird, und ist weniger durch die OS gestoppt werden, habe ich beschlossen, in einer Service-Klasse das statische Feld zu setzen, aber seltsam ist dies das Problem nicht lösen, scheint, dass OS die Dienstklasse entlädt, selbst wenn der Dienst selbst noch im Hintergrund läuft, oder zumindest so aussieht, als ob er wieder geladen wird, wenn ein Ereignis aufgerufen wird, ich weiß nicht genau, was passiert, aber das statische Feld wird danach NULL eine Zeit lang, als ich eine Benachrichtigung in einem Timer gesetzt habe, um das zu überprüfen. kann das jemand bestätigen?

+0

Datenbank verwenden? Sie können es auch verschlüsseln. –

+2

Was meinen Sie mit "zugänglicher Speicher"? Die einzigen Personen, die auf SharedPreferences zugreifen können, sind diejenigen, die ihr Gerät rooten. Es ist nicht so, dass dein Feld irgendwie magisch gegen alle anderen sicher ist. Schließlich können die Menschen mit den entsprechenden Werkzeugen auch dazu kommen. Welches Profil des angreifenden Angreifers kann auf diesen "sensiblen" Wert zugreifen? – CommonsWare

+0

Ich weiß, dass die SharedPreferences Root-Zugriff benötigt, um gelesen zu werden, aber es ist schwieriger für Angreifer auf den RAM zuzugreifen. Wenn ich also eine RAM-Disk oder ähnliches erstellen kann, wird mein Problem gelöst – ammcom

Antwort

1

Wenn Sie vertrauliche Informationen (Schlüssel oder Token) speichern möchten, können Sie den Keystore-Anbieter verwenden, finden Sie den Android-Entwickler Link - http://developer.android.com/training/articles/keystore.html. aber es ist ab Android 4.3 verfügbar.

+0

Vielen Dank für Ihre Informationen Ich werde es mir ansehen – ammcom

1

Sie können einen gestarteten Dienst erstellen, der nach dem Löschen der Aktivität blockiert bleibt. Der Dienst kann zerstört werden, wenn er nicht mehr benötigt wird. Sie müssen weiterhin den guten Praktiken, den öffentlichen Getter und Setter der privaten Variablen folgen und im Manifest usw. vorsichtig sein. Statisch bedeutet in diesem Fall, dass Sie nur eine Kopie des Wertes der Variablen haben, unabhängig von der Anzahl der Objekte des Testklassentyps.

+0

Dies ist eine gute Lösung, und ich versuche, es zu folgen, aber können Sie bestätigen, dass das Service-Objekt nie ist zerstört ?, Ich habe einen kleinen Test und keine Garantie, dass das Java-Objekt des Dienstes im Speicher gespeichert wird, das einzige, was bestätigt wird, dass der Dienst selbst als eine Anwendungskomponente nicht gestoppt und von Android-System verwaltet wird – ammcom