Подтвердить что ты не робот

StartForeground() вызывает проблемы с кордорой

Я использую службу в своем приложении cordova, которое генерирует уведомление startForeground в onCreate. Если приложение было убито с помощью салфетки и снова запустилось, событие с готовностью устройства cordova больше не запускается. Кажется, что объект cordova сам не определяется, когда приложение перезапускается. Появляется следующее сообщение об ошибке:

E/Web Console(19472): Uncaught TypeError: Object #<Object> has no method 'exec' at file:///android_asset/www/src/jsFile.js:31

Строка 31 и следующая:

cordova.exec(function (r) {
            if (callback) {
                callback(r);
            }
        }, function (err) {
            if (callback) {
                callback(false);
            }
        }, "Plugin", "functionName", []); 

Проблема возникает только в том случае, если я использую startForeground в моей службе, если я прокомментирую эту часть кода, что все работает правильно. Мне отчаянно нужна помощь по этим вопросам:

  • Можно ли запустить ручку cordova вручную?
  • Как запустить службу с помощью startForeground, но по-прежнему запускать устройство cordova-ready после убийства и перезапуска приложения.

Edit:

После создания двух быстрых проектных проектов, один в Кордове 3.6 (версия, которую я использую для моего фактического приложения) и с Кордовой 5.1, я понял, что проблема в не возникает в новом Кордова версия. Однако я не хочу обновлять, потому что:

  • Никогда не прикасайтесь к работающей системе.
  • Я не знаю, что больше не может работать в версии никогда, поскольку я установил много плагинов в своем приложении.
  • Я ленивый.

Любая идея, что могло измениться с 3.6 до 5.1, которая решила ошибку, и мог ли я обновить свой код 3.6 соответственно?

Edit2:

Это не дубликат этого вопроса. Обратный вызов deviceReady был ошибочно принят в этом вопросе. Это не относится к моему приложению, и было бы бесполезно работать только тогда, когда я не использую startForeground в своей службе.

4b9b3361

Ответ 1

Кажется, у вас проблемы с жизненным циклом приложений. Когда вы прокручиваете или принудительно закрываете приложение, процесс приложений убивается, поэтому при перезапуске, если вы не сохраняли зависимые объекты или переменные в пакете состояния, они возвращаются как null, потому что активность предполагает, что эти вещи доступны. Можете ли вы вставить код, который у вас есть в onCreate() am guessing thats, где ваша определяющая кордова.

Ответ 2

Когда JS не записывается в обратном вызове события onDeviceReady() - или перезагрузка Cordova WebView, когда Device уже находится в состоянии "готов" - в этом случае событие onDocumentReady() будет в другое время.

попробуйте настроить тестовый сценарий, который регистрирует, когда какое событие запускается; разница между Device и Document Готов может быть преступником. verbose logging событий JS и Logcat.

может потребоваться связать события JS по-разному или переместить код между ними, чтобы предотвратить ситуацию, которая выглядит: перезагрузить a WebView, когда Device "готов", возможно, некоторые как попытка реализации, которая работает против концепции использования JS-приложения в рамках реализации WebView? Не увидев наименьший код (скорее, этот "пример" не будет функционировать, а есть неработающие ссылки), я бы предположил, что Service уже запущен, а приложение не может запустить его.

Это может быть функциональный пример того, что вы пытаетесь архивировать.

Хотя текущая версия Кордовы скорее 7.0, чем 5.1.