Я запускаю приложение, созданное с помощью IBM MobileFirst 7, на iOS 8.4. Сначала все работает нормально: я могу писать в jsonstore и выполнять вызовы других нативных функций.
Затем приложение начинает синхронизацию и запись в JSONStore (много данных) и через некоторое время останавливается (ошибок в консоли нет). Обычно это происходит при попытке вызвать функцию WL.Client.invokeProcedure.
Я также заметил странное поведение: если я дважды нажимаю кнопку «Домой», он делает следующий вызов WL.Client.invokeProcedure в цикле, и я получаю результаты от адаптера, но затем он снова останавливается (каждый раз, когда я дважды нажимаю кнопку «Домой», это происходит) ). Это также происходит с другими нативными вызовами (например, я пытался вызвать другую нативную функцию в консоли JS с помощью кордовы, и она вызывается только после двойного нажатия кнопки «Домой»).
Кто-нибудь знает, что может быть причиной такого поведения? ~
РЕДАКТИРОВАТЬ:
Что касается собственных вызовов: поскольку я использую кордову, я могу использовать плагин для доступа к некоторым собственным функциям, например:
//this is what I meant by "native function calls"
cordova.exec(successCallback, errorCallback, 'SFRPowerSave', 'enable', []);
Я не уверен в функциях WL.Client.invokeProcedure и WL.JSONStore, но я думаю, что они также используют собственный код.
Вот что я делаю:
//I get the first 50 dirty documents
function push(){
var numberOfDocumentsToPush = 50;
var dirtyDocuments = currentSyncStore.dirtyDocuments.splice(0, numberOfDocumentsToPush);
//then I call the adapter add method and return a promise
return when(WL.Client.invokeProcedure({
adapter : adapter.name,
procedure : adapter.push.procedure,
parameters : [ JSON.stringify(dirtyDocuments),
JSON.stringify({add: addParams}) ],
compressResponse : false
}, {
timeout: adapter.timeout,
invocationContext: {context: this, document: dirtyDocuments}
});
}
//after the promise is returned, I get the next 50 dirty documents and call the push function again, I usually have a lot of dirtyDocuments (lets say 10000).
//After a while it just stops, the WL.Client.invokeProcedure doesn't reject or resolve the promise and no timeout occurs.
//I can interact with the interface of the application but if I try to call some native function, it will not work (but it gets called immediatly after entering the multitask mode - double tap home button in ipad/iphone)
//In the adapter I call the stored procedure from the DB2 database one time for each document:
function pushLogs(logs, params, addFunction){
var parsedParams = JSON.parse(params);
var addParsedParams = parsedParams.add;
var addConfig = getConfig("logs", addFunction, JSON.stringify(addParsedParams));
var parsedLogs = JSON.parse(logs);
var globalResult = {
isSuccessful: true,
responses: []
};
for (var i = 0; i < parsedLogs.length; i++) {
var options = {
values : JSON.stringify(parsedLogs[i].document),
spConfig: addConfig
};
var result = invokeSQLStoredProcedure(options);
globalResult.isSuccessful = globalResult.isSuccessful && result.isSuccessful;
globalResult.responses.push(result);
}
return globalResult;
}