2015-08-10 15 views
48

Ich benutze einen Service in meiner Cordova App, die eine startForeground Benachrichtigung im onCreate erzeugt. Wenn die App durch Streichen getötet und erneut gestartet wird, wird das cordova-Gerät-bereit-Ereignis nicht mehr ausgelöst. Es scheint das cordova Objekt selbst ist nicht definiert, wenn die App neu gestartet wird. Ich erhalte die folgende Fehlermeldung:startForeground() verursacht Probleme mit cordova

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

Zeile 31 und folgende:

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

Das Problem tritt nur, wenn ich die startForeground in meinem Dienst zu nutzen, wenn ich diesen Teil des Codes auf Kommentar es funktioniert alles richtig. Ich brauche dringend Hilfe zu diesen Fragen:

  • Ist es möglich, Cordova manuell ausgeführt werden?
  • Wie der Dienst mit startForeground starten, aber immer noch den cordova geräten bereit nach der Tötung und Neustart der App auslösen
  • Edit:

    Nachdem zwei schnelle Beispiel Projekte, eines in Cordova 3.6 (die Version, die ich für meine aktuelle App verwende) und weiter mit Cordova 5.1, erkannte ich, dass das Problem in der neuen Cordova-Version nicht auftritt. Allerdings möchte ich nicht wirklich aktualisieren, denn:

    • niemals ein laufendes System
    • Ich weiß nicht berühren, was nicht mehr funktionieren könnte in der nie Version, da ich viele Plugins in meiner App installiert haben .
    • Ich bin faul.
    • Irgendeine Idee, was von 3.6 zu 5.1 geändert werden könnte, die den Fehler lösten, und ob ich meinen 3.6 Code entsprechend aktualisieren könnte?

      Edit2:

      Dies ist nicht ein Duplikat this question. Der gerätebezogene Rückruf wurde in dieser Frage falsch übergeben. Dies ist in meiner App nicht der Fall, und es wäre nicht sinnvoll, nur zu arbeiten, wenn ich startForeground in meinem Dienst nicht verwende.

    +1

    können Sie Ihre Frage bearbeiten und den JAVA-Code (den Plugin-Code) angeben. –

    +1

    Es spielt keine Rolle (99,9% sicher), wie ich jedes Plugin, das ich will, aufrufen kann und der Fehler bleibt gleich. –

    +0

    Nur ein einfacher Vorschlag: Wenn Sie immer noch das Problem haben (ich denke, Sie haben eine Lösung gefunden), ist Ihr 'useCapture'-Parameter am Ende des Ereignisses auf' false' gesetzt: 'addEventListener ('deviceready', onDeviceReady, false); '? –

    Antwort

    -1

    Wenn die JS nicht innerhalb der onDeviceReady() Ereignisrückruf geschrieben - oder die Cordova WebView neu geladen wird, wenn Device ist bereits in „ready“ Zustand - in diesem Fall nur die onDocumentReady() Veranstaltung wird ein anderes Mal ausgelöst werden.

    versuchen, einen Testfall einzurichten, der protokolliert, wann welches Ereignis ausgelöst wird; der Unterschied zwischen Device & Document Ready könnte der Schuldige sein. ausführliche Protokollierung von JS-Ereignissen & Logcat vorgeschlagen.

    es erforderlich sein, die JS Ereignisse anders zu binden oder Code zwischen ihnen, um die Situation zu verhindern bewegen, was zu sein scheint: ein WebView neu zu laden, wenn die Device „bereit“ ist, möglicherweise eine Art Umsetzung Versuch, der gegen das Konzept arbeitet, eine JS-Anwendung zu haben, die innerhalb einer WebView Implementierung läuft? Ohne den geringsten Code gesehen zu haben (es ist ziemlich offensichtlich, dass dieses "Beispiel" nicht funktioniert, während es gebrochene Referenzen gibt), würde ich vermuten, dass die Service bereits läuft, während die App es nicht starten kann.

    Dies könnte eine funktionale example von dem, was Sie versuchen zu archivieren. Die aktuelle Version von Cordova ist eher 7.0 als 5.1.

    +0

    Zum Zeitpunkt des Schreibens der Frage war die aktuelle Version 5.1 :) Ich bin sehr zuversichtlich, dass unser Code nicht das Problem ist, da das Problem mit dem cordova-Update behoben zu sein scheint, was auf einen Fehler in der vorherigen cordova-Version hinweist. –

    +0

    @MichaelKunst Ich bin zuversichtlich, du verstehst nicht die Reihenfolge der DOM-Events ... Danke für die Down-Abstimmung - werde nie wieder versuchen, dir zu helfen, mit deinen Noob-Fragen. –

    1

    Es scheint, dass Sie ein Problem mit dem Lebenszyklus Ihrer Apps haben. Wenn Sie die App wischen oder gewaltsam schließen, wird der App-Prozess beendet. Wenn Sie also keine abhängigen Objekte oder Variablen im Statuspaket gespeichert haben, werden sie als null zurückgeliefert, da die Aktivität davon ausgeht, dass diese Objekte verfügbar sind. Kannst du den Code einfügen, den du in der onCreate() ratetest, ist das, wo dein definierendes cordova ist.

    Verwandte Themen