Jak trwała jest pamięć lokalna na Androida i iOS?

Kiedy moja aplikacja przechowuje dane lokalnie na telefonie, jak trwałe jest to miejsce? Podam dokładną sytuację:

Buduję aplikację z jQueryMobile i Phonegap. Zasadniczo jest to aplikacja przeglądarkowa, ale korzystanie z Phonegap pozwala mi ją spakować i sprzedać w sklepach z aplikacjami, między innymi.

Phonegap oferuje dwa sposoby przechowywania, z których oba funkcje harmonizują natywne funkcje systemu iOs, Android, Blackberry i niektórych innych systemów operacyjnych: localStorage (który jest prymitywną wartością klucza par) oraz bazy danych Web SQL. Zarówno localStorage, jak i web SQL są formami pamięci, które należą do przeglądarki. Mimo to nie mogę dowiedzieć się, jak długo Dane będą przechowywane, w jakich okolicznościach zostaną usunięte, w jakich okolicznościach mogą być niedostępne itp.

Na przykład, jeśli aplikacja przechowuje dane za pomocą localStorage lub web SQL, a użytkownik przełączy się na inną standardową przeglądarkę na swoim Androidzie, aplikacja zostanie otwarta w nowej przeglądarce i oznacza to, że że przechowywane dane są niedostępne?

Jeśli użytkownik nie korzysta z aplikacji przez rok (co w moim przypadku jest realistycznym i niekoniecznie złym scenariuszem), czy dane wygasły jak plik cookie, czy może zostały wypchnięte z pamięci przeglądarki przez Potop danych z innych aplikacji?

Czy dane zostaną zniszczone jeszcze wcześniej, np. gdy: - użytkownik odwiedza inną stronę w przeglądarce - przeglądarka jest ręcznie zamykana - proces przeglądarki jest zabity lub umiera - etc

Lub są localStorage i web SQL rodzaj pamięci masowej, którą usuwasz tylko wtedy, gdy (w systemie Android) przejdziesz do Ustawienia > Aplikacje i aktywnie usuniesz dane użytkownika powiązane z aplikacją?

Dzięki za wszelkie spostrzeżenia. Nie ma tam nic pouczającego na ol' WWW.

Co się dzieje w przypadku aktualizacji aplikacji. Pamięć lokalna i internetowa zostaną usunięte, czy pozostanie?

Author: Kashif Nazar, 2011-10-13

8 answers

Pozwól mi odpowiedzieć krok po kroku

Jeśli aplikacja przechowuje dane z localStorage lub web SQL, a użytkownik przełącza się na inną standardową przeglądarkę na swoim Androidzie, czy aplikacja zostanie otwarta w nowej przeglądarce i oznacza to, że przechowywane dane są niedostępne?

Dane są zapisywane w "pamięci podręcznej" (nie jest to pamięć podręczna) przeglądarki, więc jeśli zmienisz przeglądarkę lub ustawisz ustawienia tak, aby domyślna przeglądarka została usunięta lub zmieniona, dane zostaną usunięte idź.

Jeśli użytkownik nie korzysta z aplikacji przez rok (co w moim przypadku jest realistyczny i niekoniecznie zły scenariusz), czy dane będą miały wygasła jak ciasteczko, a może została wypchnięta z przeglądarki przechowywanie przez Potop danych z innych aplikacji?

Nie, dane pozostaną tam bez względu na to, jak długo nie będą używane. Więc nawet jeśli wyczyścisz pamięć podręczną przeglądarki, nadal tam będzie.

Czy dane zostaną zniszczone jeszcze wcześniej, np. gdy: - użytkownik odwiedza inną stronę w przeglądarce-Przeglądarka jest ręcznie zamykana - proces przeglądarki jest zabijany lub umiera-etc

Nie, dane pozostają w porządku. :-)

Lub są localStorage i web SQL rodzaj pamięci masowej, że tylko Usuń, gdy (w Androidzie) przejdziesz do Ustawienia > Aplikacje i aktywnie Usuń dane użytkownika powiązane z aplikacją?

Tak, dane trafiają tylko wtedy, gdy ręcznie usuniesz je z aplikacji lub odinstalujesz aplikację. Zostanie w wszystkie inne sprawy.

Edytuj: W przypadku systemu IOS system operacyjny usunie dane z pamięci lokalnej, gdy w urządzeniu wystąpi niedobór pamięci.

 56
Author: ghostCoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-15 10:27:14

[[2]}od iOS 5.1 odpowiedź @ghostCoder jest już nieaktualna. Firma Apple zdecydowała się przenieść lokalizację localstorage do folderu pamięci podręcznej, który można opróżnić w dowolnym momencie. Możesz śledzić tę dyskusję tutaj:

Google Groups dyskusja na temat Localstorage

Również ten blog wyjaśnia problem bardziej szczegółowo:

Http://www.marco.org/2011/10/13/ios5-caches-cleaning

Możliwe jest ręczne skierowanie lokalizacji localstorage do sejfu Application_Home> / Documents location. Aby określić aktualną lokalizację localstorage, możesz użyć czegoś takiego:

NSString* localStorageSubdir = (IsAtLeastiOSVersion(@"5.1")) ? @"Caches" : @"WebKit/LocalStorage";
NSString* localStoragePath = [library stringByAppendingPathComponent:localStorageSubdir];
NSString* localStorageDb = [localStoragePath stringByAppendingPathComponent:@"file__0.localstorage"];

Poniższy kod pozwala ustawić inną lokalizację dla localstorage:

NSString* bundleIdentifier = [[mainBundle infoDictionary] objectForKey:@"CFBundleIdentifier"];
NSString* libraryPreferences = @"Library/Preferences";
NSString* appPlistPath = [[bundlePath stringByAppendingPathComponent:libraryPreferences]    stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist", bundleIdentifier]];

NSString *value;
NSString *key = @"WebKitLocalStorageDatabasePathPreferenceKey";
value = [appPlistDict objectForKey: key];
if (![value isEqual:ourLocalStoragePath]) {
    [appPlistDict setValue:yourPreferredLocalStoragePath forKey:key];
} 
 36
Author: dvtoever,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-01 16:46:56

Wypróbuj wtyczkę NativeStorage. https://www.npmjs.com/package/cordova-plugin-nativestorage .

Ma ustawione, put I get funkcje, które implementują możliwości platformy, takie jak Android shared preferences i iOS NSUserDefaults, co sprawia, że przechowywanie danych jest tak bezpieczne, jak to dozwolone.

cordova plugin add cordova-plugin-nativestorage

NativeStorage.putObject("reference_to_value",<object>, <success-callback>, <error-callback>);

NativeStorage.getObject("reference_to_value",<success-callback>, <error-callback>);
 5
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-20 08:07:01

Dobrym rozwiązaniem, które jest teraz dostępne jest Cordova Native Storage Plugin .

Pozwala to na prostą, ale natywną metodę zapisywania danych w systemach iOS i Android poprzez natywne implementowanie SharedPreferences w systemach Android i NSDefault w systemie iOS, aby zagwarantować niezawodność.

Użycie:

Instalacja:

cordova plugin add cordova-plugin-nativestorage

Przechowywanie wartości:

NativeStorage.setItem("reference_to_value",<value>,<success-callback>, <error-callback>);

Pobieranie wartości:

NativeStorage.getItem("reference_to_value",<success-callback>, <error-callback>);
 3
Author: Iceman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-23 09:34:02

Na android {[2] }domyślnie jest to stała pamięć masowa. Nawet jeśli użytkownik zaktualizuje swoją aplikację, pozostaje taka sama.

Użytkownik może przejść do ustawień i wyczyścić pamięć podręczną i dane w takim przypadku idzie lub jeśli powiedzmy, że jedna z aplikacji clean-it to robi.

Nawet na iOS {[2] }to miejsce na stałe, ale nie wiem o scenariuszu aktualizacji aplikacji. Ale w starszej wersji (5.1) nie było, a w 6+ zrobili, że można to zrobić na stałe poprzez flagę, która została natychmiast włączona przez cordova / phonegap.

 3
Author: aWebDeveloper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-29 17:01:22

Nie mogę mówić w imieniu innych platform, ale na moim urządzeniu z Androidem 4.1 używam localStorage do przechowywania niektórych danych lokalnie za pomocą jQuery Mobile i odkryłem, że Android wyczyści moją pamięć podręczną co tydzień lub tak bez mojej wiedzy. Mam zamiar dać Web SQL spróbować i zobaczyć, czy to jest lepsze.

 1
Author: qJake,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-13 04:49:08

Znalazłem to w internecie ng-persist

Przechowywać dane na urządzeniach mobilnych (za pomocą cordova), który utrzymuje się nawet jeśli użytkownik ponownie instaluje aplikację

Zainstaluj

bower install ng-persist ngstorage --save

Wstrzyknąć$persist do kontrolera

.controller('MyCtrl', function($persist) {

    $persist
        .set(namespace, key, val)
        .then(function () {
            // saved
        });

    // read
    $persist
        .get(namespace, key, fallback)
        .then(function (val) {
            // val is either the value, if exists, or the fallback
        });

    // delete
    $persist
        .remove(namespace, key)
        .then(function () {
            // removed
        });

});
 0
Author: niksmac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-19 12:37:25

Byłoby lepiej pod względem wydajności, bezpieczeństwa i niezawodności unikać korzystania z lokalnej pamięci masowej i użytkowania Cordova-sqlite-storage zamiast tego.

niektóre uwagi:

localStorage ma tę zaletę, że jest łatwy w użyciu, ale działa synchronicznie. Oznacza to, że może zablokować wątek interfejsu użytkownika i spowodować powolną wydajność.

localStorage ma ograniczoną ilość pamięci, Zwykle 5mb.

localStorage może być wymazany przez system operacyjny (android,ios) w dowolnym momencie. To jest naprawdę poważne, jeśli zależy ci na trwałości danych.

z drugiej strony:

Cordova-sqlite-storage jest asynchroniczny i nie zablokuje wątku interfejsu użytkownika, zapisuje dane na macierzystej pamięci urządzenia, ilość pamięci nie jest ograniczona, system operacyjny nie usunie żadnych danych, chyba że odinstalujesz aplikację.

 0
Author: Sarantis Tofas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-27 12:23:40