8
votes

Android est la force-tue mon lanceur sur BT Connect

J'ai écrit une application de lanceur pour Android avec Apache Cordova. C'est pour une application de kiosque et fondamentalement, cela fonctionne bien.

Malheureusement, il y a un problème: Dans certaines circonstances, Android est la force de tuer mon application et de le redémarrer immédiatement. - Il faut environ 3 secondes pour charger, où il affiche un écran blanc. Cela commence complètement nouveau (l'onpaause, onResume ne s'appelle pas). Dans le journal, je trouve: xxx

Les circonstances quand il arrive:

  • Cela arrive après plusieurs heures de disponibilité
  • Cela arrive chaque fois Vous connectez une télécommande Bluetooth. (Il est déjà jumelé). Après quelques minutes de ralenti, la télécommande se déconnecte pour économiser de l'énergie. Dès que vous le reconnectez (en appuyant sur un bouton), l'application se bloque et redémarre.

    ce que j'ai essayé jusqu'à présent sans chance:

    • Installez l'application comme une application "normale" (pas un lanceur)
    • Désinstallez chaque plugin Cordova

      périphériques, où l'erreur se produit:

      • Tablette Android 4.4.2 (produit "NO-NAME") - L'erreur est présente
      • Tablette Android 5.1 (produit "NO-NAME") - L'erreur est présente
      • Android 5.1.1 Téléphone (Samsung Xcover) - Pas de problème !! / Li>
      • Android 4.4.2 Téléphone (Samsung Galaxy S III NEO) - Aucun problème !!

        Alors pourquoi l'Android sur les tablettes tue mon application? Est-ce parce qu'ils ont du matériel bon marché ou parce que les versions Android sont plus âgées? Comment puis-je empêcher ce bogue?

        J'ai découvert que le problème n'est pas lié à la programmation, car Ce problème se produit sur chaque application . C'est pourquoi j'ai posté une autre question sur Android-enthousiastes


10 commentaires

Bien que je ne suis pas un expert en Android, je regarde le journal, je sens la clé dans les lignes suivantes: "Java.lang.illegalargumentException: la fenêtre demandée android.os.binderproxy@427d8618 n'existe pas" Cette erreur se produit généralement lorsque vous essayez de Invoquer une API système qui n'est pas disponible sur votre périphérique cible. C'est pourquoi comme vous avez dit que cette question est dépendante du dispositif. De plus, cette question provoque le redémarrage de l'application comme vous l'avez dit. Tout ce que vous avez besoin de comprendre est "Qu'est-ce que l'appel de l'API qui bloque votre application". J'espère que ça a du sens.


@Ingoalbers Bien que je ne suis pas un expert en Android, en regardant le journal, je ressente la clé dans les lignes suivantes- "java.lang.illegalargumentException: la fenêtre demandée android.os.binderproxy@427d8618 n'existe pas" Cette erreur se produit généralement lorsque vous Essayez d'invoquer une API système qui n'est pas disponible sur votre périphérique cible. C'est pourquoi comme vous avez dit que cette question est dépendante du dispositif. De plus, cette question provoque le redémarrage de l'application comme vous l'avez dit. Tout ce que vous avez besoin de comprendre est "Qu'est-ce que l'appel de l'API qui bloque votre application". J'espère que ça a du sens.


Merci pour votre commentaire. Le problème est que je n'invoque aucun appel de l'API système. Le système le fait lui-même. Peut-être que je peux changer cela dans un fichier de configuration système? (La racine est disponible), mais je ne sais pas où regarder et quoi changer.


Vous avez mentionné que ce problème se produit à chaque fois que lorsque vous vous connectez à la télécommande Bluetooth. Donc je regarderais dans ces lignes pour comprendre


Une chose plus intéressante que j'ai notée dans votre message est que cet accident ne se produit que dans le produit sans nom. Donc, je pense que le nom de non-nom ne pouvait que causer le problème comme lors de la paire Bluetooth, en interne Bluetoothdevice.getname () peut renvoyer NULL résultant de l'accident.Je crois fermement que cela provoque le problème et vous suggère de regarder ce lien pour certains Help - Stackoverflow.com/questions/26290640/... garde-moi posté


@Ingoalbers avez-vous eu la chance de regarder ce commentaire? Était-ce utile?


@Ingoalbers l toute mise à jour à ce sujet?


@Gandhi malheureusement, je ne travaille plus sur ce projet. Autant que je sache, Michael n'a pas encore résolu ce problème. Il va mettre à jour ici bientôt. Merci pour les commentaires jusqu'à présent. Certainement donné des idées.


@Michaelb n'importe quelle chance Michael? La réponse a-t-elle aidé?


@Ingoalbers merci pour la prime. Vraiment sentir motivé. Codage heureux. À votre santé


5 Réponses :



0
votes

Ceci est vrai avec toutes les applications. Toute application qui a été allée à l'arrière-plan ou n'est pas utilisée pendant un certain temps, le moteur virtuel le définit à une priorité inférieure et lorsqu'elle a besoin de mémoire ou de toute autre ressource, elle tue l'application.

Vous ne pouvez pas l'éviter. Ce que vous pouvez faire est de redémarrer au même endroit où il a été tué avec OnsaveinsCestate () et OnrestoreInstancestate () :

OnsaveInstancestate () et OnrestoreInstancestate ()

L'autre option consiste à avoir un service connecté à votre application. De cette façon, votre application ne vous est pas tuée:

Comment pouvons-nous empêcher un service de être tué par le système d'exploitation?


1 commentaires

Cela pourrait être une solution générique. Mais je ne pense pas qu'il aborde la question spécifique que l'utilisateur est bloqué.



0
votes

Bien que je ne suis pas un expert en Android, en regardant le journal, je ressente la clé dans les lignes suivantes:

"java.lang.illegalargumentException: fenêtre demandée android.os.binderProxy@427d8618 n'existe pas"

Cette erreur se produit généralement lorsque vous essayez d'invoquer une API système non disponible sur votre périphérique cible. C'est pourquoi comme vous avez dit que cette question est dépendante du dispositif. De plus, cette question provoque le redémarrage de l'application comme vous l'avez dit. Tout ce que vous avez besoin de comprendre est "Qu'est-ce que l'appel de l'API qui bloque votre application"

Une chose plus intéressante que j'ai notée dans votre message est que cet accident ne se produit que dans produit sans nom . Je pense donc que le nom de non-nom pourrait simplement causer le problème comme lors de la paire Bluetooth, en interne bluetoothtevice.getname () peut renvoyer null résultant dans le crash.i croyez fermement que cela cause le problème et vous suggère Pour regarder cet lien pour une aide.


0 commentaires

0
votes

Sa tablette non comprimée ou mobile. Je soupçonne Ne gardez pas l'option Activités (Options de développeur) est activé dans votre tablette. S'il vous plaît vérifier cela.

Android 4.4.2 Tablette ("NO-NAME") - L'erreur est présente

Tablette Android 5.1 (produit "NO-NAME") - L'erreur est présente


1 commentaires

Merci! Malheureusement, ce n'est pas le cas - l'option n'est pas définie.



1
votes

Le problème a été causé par les modifications apportées à la configuration du système en exécution. Par défaut, les activités ne manipuleront pas les personnes, mais ne seront que redémarrer.

voir https://developer.android.com/Guide/topics /resources/runtime-changes.html

CORDOVA ajoute des gestionnaires pour Orientation , KeyboardChriden , clavier , Screensize et locale Par défaut.

Pour résoudre notre problème, nous devons simplement ajouter pour traiter la modification de configuration pour Navigation à notre activité comme ceci: xxx


0 commentaires