startForeground()导致cordova问题
我在我的cordova应用程序中使用一个服务,在onCreate生成一个startForeground
通知。 如果应用程序通过刷卡被终止并重新启动,那么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
,如果我注释掉这部分的代码,它就可以正常工作了。 我迫切需要一些关于这些问题的帮助:
- 是否有可能让科多瓦手动运行?
- 如何使用
startForeground
启动服务,但在杀死并重新启动应用程序后仍然触发cordova设备
编辑:
在做了两个快速的示例项目,一个在cordova3.6(我用于我的实际应用程序的版本)和cordova5.1,我意识到这个问题不会发生在新的cordova版本。 不过,我并不想更新,因为:
- 切勿触摸正在运行的系统
- 我不知道什么可能不再工作了,因为我已经在我的应用程序中安装了很多插件。
- 我很懒。
任何想法可以改变从3.6到5.1,解决了这个错误,以及我是否可以相应地更新我的3.6代码?
EDIT2:
这不是 这个问题的重复。 deviceReadycallback在这个问题中被错误地传递了。 在我的应用程序中,情况并非如此,只有在我的服务中不使用startForeground
。
看起来你有一个围绕你的应用程序生命周期的问题。 当您轻扫或强行closures应用程序时,应用程序进程将被终止,因此重新启动时,如果您没有在状态包中保存依赖对象或variables,它们将返回为空,因为活动假定这些事情可用。 你可以粘贴你的代码在onCreate()
我猜这是你的定义cordova。
当JS没有写入onDeviceReady()
事件callback – 或者Cordova WebView
被重新加载时,当Device
已经处于“就绪”状态时 – 在这种情况下,只有onDocumentReady()
事件会被再次触发。
尝试设置一个testing用例,logging哪个事件被触发; Device
和Document
就绪之间的区别可能是罪魁祸首。 JS事件&Logcat的详细日志build议。
可能需要以不同的方式绑定JS事件或将代码移入它们之间,以防止出现这种情况,这种情况似乎是:在Device
“准备就绪”时重新加载WebView
,可能是某种实现尝试反对在WebView
实现中运行JS应用程序的概念? 没有看到最less的代码(很显然,这个“示例”不会运行,而有错误的引用),我猜Service
已经运行,而应用程序无法启动它。
这可能是你要存档的function的例子 。
虽然Cordova的当前版本是7.0而不是5.1。