Android和iOS上的本地存储有多长久?

Wyt*_*tze 74 local-storage web-sql cordova

当我的应用程序在手机上本地存储数据时,该存储有多长久?我会详细说明具体情况:

我正在使用jQueryMobile和Phonegap构建一个应用程序.它本质上是一个浏览器应用程序,但使用Phonegap让我打包并在应用程序商店中出售,以及其他优点.

Phonegap提供两种存储方式,这两种方式都可以协调iO,Android,Blackberry和其他一些操作系统的本机功能:localStorage(原始键值对)和Web SQL数据库.localStorage和Web SQL都是属于浏览器的存储形式.话虽如此,我无法确定数据将保存多长时间,在什么情况下会被删除,在什么情况下可能无法使用等等.

例如,如果应用程序使用localStorage或Web SQL存储数据,并且用户在其Android上切换到不同的标准浏览器,那么是否可以使用新浏览器打开应用程序,这是否意味着存储的数据不可用?

如果用户一年没有使用该应用程序(在我的情况下是一个现实的,不一定是坏的情况),数据是否会像cookie一样过期,或者可能被大量的数据库推出浏览器的存储空间来自其他应用的数据?

或者甚至更早地销毁数据,例如: - 用户访问浏览器中的另一个站点 - 手动关闭浏览器 - 浏览器进程被终止或死亡 - 等等

或者localStorage和web SQL是您在(在Android中)转到设置>应用程序并主动删除与应用程序关联的用户数据时仅删除的存储类型?

感谢您的任何见解.在'WWW'上没有任何信息.

在应用更新的情况下会发生什么.本地和网络存储将被删除或将保留?

gho*_*der 57

让我一步一步回答

如果应用程序使用localStorage或Web SQL存储数据,并且用户在其Android上切换到其他标准浏览器,那么是否可以使用新浏览器打开应用程序,这是否意味着存储的数据不可用?

数据保存在浏览器的"缓存"(它不完全是缓存)中,因此如果您更改浏览器或设置设置以便删除或更改默认浏览器,数据将会继续.

如果用户一年没有使用该应用程序(在我的情况下是一个现实的,不一定是坏的情况),数据是否会像cookie一样过期,或者可能被大量的数据库推出浏览器的存储空间来自其他应用的数据?

不,无论多长时间不使用,数据都会保留在那里.因此,即使您清除浏览器缓存,它仍然会存在.

或者甚至更早地销毁数据,例如: - 用户访问浏览器中的另一个站点 - 手动关闭浏览器 - 浏览器进程被终止或死亡 - 等等

不,数据保持不变.:-)

或者localStorage和web SQL是您在(在Android中)转到设置>应用程序并主动删除与应用程序关联的用户数据时仅删除的存储类型?

是的,仅当您从应用程序手动删除数据或卸载应用程序时,数据才会出现.它会留在所有其他情况下.

编辑:对于iOS,当设备内存不足时,操作系统将删除本地存储中的数据.


dvt*_*ver 38

从iOS 5.1 @ ghostCoder的答案不再有效.Apple已决定将localstorage位置移动到缓存文件夹中,该文件夹可随时清空.您可以在此处跟踪此讨论:

Google网上论坛关于Localstorage的讨论

此博客还更详细地解释了这个问题:

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

可以手动将本地存储位置指向安全的Application_Home>/Documents位置.要确定您当前的本地存储位置,您可以使用以下内容:

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

以下代码允许您为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];
} 
Run Code Online (Sandbox Code Playgroud)

  • 哎呀!感谢您的警告,我即将发布到iOS. (2认同)

小智 6

试试NativeStorage插件.https://www.npmjs.com/package/cordova-plugin-nativestorage.

它设置,放置和获取实现平台功能的功能,如android共享首选项和iOS NSUserDefaults,使数据存储尽可能安全.

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>);
Run Code Online (Sandbox Code Playgroud)