【问题标题】:startForeground() causing problems with cordovastartForeground() 导致科尔多瓦出现问题
【发布时间】:2015-08-10 09:50:35
【问题描述】:

我在我的 cordova 应用程序中使用了一项服务,该服务在 onCreate 中生成 startForeground 通知。如果应用程序通过滑动被杀死并重新启动,则不再触发 cordova device-ready 事件。重新启动应用程序时,似乎未定义 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 device-ready

编辑:

在制作了两个快速示例项目后,一个在 Cordova 3.6(我用于我的实际应用程序的版本)和一个在 Cordova 5.1 中,我意识到问题确实不会出现在新的科尔多瓦版本。但是我真的不想更新,因为:

  • 切勿触摸正在运行的系统
  • 我不知道在 never 版本中什么可能不再起作用,因为我在我的应用程序中安装了许多插件。
  • 我很懒。

知道从 3.6 到 5.1 有什么改变可以解决这个错误,以及我是否可以相应地更新我的 3.6 代码?

编辑2:

不是this question 的副本。在这个问题中错误地传递了 deviceReady 回调。在我的应用中并非如此,仅当我在服务中不使用 startForeground 时才工作是没有意义的。

【问题讨论】:

  • 您能否编辑您的问题并提供 JAVA 代码(插件代码)。
  • 没关系(99.9% 肯定),因为我可以调用任何我想要的插件并且错误保持不变。
  • 只是一个简单的建议:如果您仍然有问题(我猜您找到了解决方案),您的 useCapture 参数是否在您的事件监听结束时设置为 falseaddEventListener('deviceready', onDeviceReady, false); ?
  • 嗨伊万。是的,这是我尝试的第一件事:) 问题已通过更新cordova 得到解决(虽然这很痛苦)。还是谢谢你。

标签: android cordova service hybrid-mobile-app


【解决方案1】:

您的应用生命周期似乎存在问题。当您滑动或强制关闭应用程序时,应用程序进程将被终止,因此如果您没有在状态包中保存依赖对象或变量,则在重新启动时它们将返回为 null,因为活动假设这些东西可用。你能粘贴你在onCreate() 中的代码吗?我猜这就是你定义cordova 的地方。

【讨论】:

    猜你喜欢
    • 2014-12-29
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2020-12-05
    • 2015-11-24
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多