【发布时间】:2015-01-30 06:29:48
【问题描述】:
我们观察到,在某些时候访问 JSONStore API 会长时间挂起,为了使其正常工作,我们必须再次调用该函数,或者必须将应用程序置于后台并再次置于前台。
注意:当应用程序遇到此问题时,在我们重新安装应用程序或重新启动设备之前,行为是相同的。
似乎没有任何合适的场景,我们搜索了很多文章但没有找到任何解决方案,欢迎任何解决方案。
我们在 S5 和 S4 等 Android 设备上观察到此问题。
这是我的代码片段:
function getWidgets(w_id, getWidgetsSuccessCallback, getWidgetsFailureCallback) {
var query = { user_id : w_id };
var options = {};
WL.JSONStore.get(StorageCollections.widgets).find(query, options)
.then(function(arrayResults) {
var count = arrayResults.length;
Logger.debug("getWidgets: success, count: " + count);
...
getWidgetsSuccessCallback(widgets);
})
.fail(function(errorObject) {
Logger.error("getWidgets: failed, error: " + JSON.stringify(errorObject));
getWidgetsFailureCallback(errorObject);
});}
一切正常时的日志http://pastebin.com/NVP8ycTG
访问 JSON 存储时的日志挂起,仅当应用程序进入后台并再次返回前台时才会起作用http://pastebin.com/eYzx57qC
JSON 存储初始化如下
var collections = {
// User
user: {
searchFields: {
user_id : 'string',
user_name : 'string',
first_name : 'string',
last_name : 'string',
}
}
}};
// Storage encryption
var options = {};
if (key) {
options.password = key;
options.localKeyGen = true;
}
// Open the collection
var promise = WL.JSONStore.init(collections, options)
.then(function() {
Logger.debug("initializeAppStorage: " + JSON.stringify(collections) + " completed");
initAppStorageSuccessCallback(true);
return true;
})
// Handle failure
.fail(function(errorObject) {
Logger.error("initializeAppStorage: failed, error: " + errorObject.toString());
initAppStorageFailureCallback(errorObject.toString());
return false;
});
return promise;
谢谢。
【问题讨论】:
-
你是如何初始化这个商店的?
-
是的,我已经编辑了我的评论;我们正在如上所述进行初始化。
-
什么是 StorageCollections.widgets?
-
同时发布成功和失败函数的代码。即 getWidgetSuccessCallback
-
当检索到的数据过多(或存储增加时与性能相关的事情)时是否会发生这种情况?