IBM Mobilefirst 7 не может выполнять собственные вызовы функций

Я запускаю приложение, созданное с помощью 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;
}

person Pedro Cardoso    schedule 31.07.2015    source источник
comment
Вам нужно предоставить конкретный пример того, что вы делаете — воспроизведение — небольшой тестовый пример вашего кода, чтобы это можно было наблюдать и отлаживать. Вам также необходимо лучше определить, что вы подразумеваете под вызовами нативных функций.   -  person Idan Adar    schedule 31.07.2015
comment
Привет Идан Адар, спасибо за ответ на мой вопрос. Я добавил некоторые детали к вопросу, вы можете взглянуть еще раз? Спасибо.   -  person Pedro Cardoso    schedule 03.08.2015


Ответы (1)


Для решения этого вопроса был открыт ПМР. Оказалось, что это дефект Cordova, и теперь он обрабатывается с помощью APAR PI47657: Приложение зависает при попытке асинхронного вызова JSONStore для синхронизации данных.

Исправление появится в будущем выпуске iFix, доступном в IBM Fix Central (а также через открытый PMR).

person Idan Adar    schedule 14.09.2015