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
в своей службе.
Ответы
Ответ 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.