PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV Mobile 2024 → Plantage entre l'init du projet et ouverture de la première fenêtre par défaut
Plantage entre l'init du projet et ouverture de la première fenêtre par défaut
Started by Pascal BOULESTEIX, Feb., 06 2024 4:22 PM - 4 replies
Registered member
964 messages
Popularité : +16 (20 votes)
Posted on February, 06 2024 - 4:22 PM
Bonjour
Depuis longtemps, quand je (on?) lance mon application sur le téléphone (installé via playstore), il arrive, peu souvent, qu'elle plante et qu'un rapport d'erreur soit envoyé sur l'erreur "checkForComodification" (voir plus bas MSG1).

Ce message est ténébreux pour moi.

Je viens de lancer une campagne de fiabilisation de mon application et en mode Go sur l'appareil, j'ai là aussi un comportement bizarre.

1 - à la fin de l'init du projet, dans le logcat, je trouve une première erreur du style "Error receiving broadcast intent" (voir plus bas MSG2).
2 - dans le dixième de second qui suit, je trouve aussi dans le logcat quasiment le même message que l'on reçoit lors du démarrage de l'application installée sur le téléphone. (voir plus bas MSG3).

En parallèle du LOGCAT, dans WM, je constate les choses suivantes avec :
1 - point d'arrêt sur la dernière instruction de l'init du projet
2 - point d'arrêt sur la première ligne de code de init de la fenêtre par défaut.

Au lancement du GO sur le téléphone, l'application s'arrête bien sur le point d'arrêt à la fin d'init du projet, si je continue en pas à pas détaillé, message d'erreur "Voulez-vous envoyer un rapport d'erreur" s'affiche.

Sur le OK autorisant l'envoi, le code se positionne sur le point d'arrêt de la première fenêtre !

Notez que si je lance le mode GO sur le téléphone, sans points d'arrêts, la fenêtre proposant l'envoi du rapport d'erruer est visible une fraction de seconde avant que la première fenêtre ne soit affichée et "recouvre" cette proposition d'envoi de rapport.

Notez aussi que bien que j'ai demandé le mode strict avec arrêt sur toutes les erreurs, ces arrêts, s'il y en a, ne sont pas visible dans le corps du code.

Notez aussi, qu'à la différence du mode GO sur le téléphone, qui arrive, tant bien que mal à démarrer l'application, en mode exécution de l'application, si l'erreur de "checkForComodification" est interceptée, l'application s'arrête.

Créer un mini-projet pour reproduire ce bug est utopique mais, peut-être que vous pourriez me mettre sur des pistes pour comprendre et corriger ce comportement

J'espère que ces explications complexes auront aiguisé votre curiosité.

MSG1 :

===== Erreur =====
Date et heure=06/02/2024 12:43:19
Pile Java=java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:966)
java.util.LinkedList$ListItr.next(LinkedList.java:888)
fr.pcsoft.wdjava.core.context.WDContexte.a(SourceFile:0)
fr.pcsoft.wdjava.core.context.c.a(SourceFile:0)
fr.pcsoft.wdjava.core.context.c.c(SourceFile:0)
fr.pcsoft.wdjava.core.context.WDAppelContexte.a(SourceFile:0)
fr.pcsoft.wdjava.database.hf.WDHF_Contexte.c(SourceFile:0)
fr.pcsoft.wdjava.database.hf.WDHF_Contexte.B(SourceFile:0)
fr.pcsoft.wdjava.database.hf.WDHF_Manager.a(SourceFile:0)
fr.pcsoft.wdjava.api.WDAPIHF.hAjoute(SourceFile:0)
fr.pcsoft.wdjava.api.WDAPIHF.hAjoute(SourceFile:0)
fr.saxrub.wnat.wdgen.GWDCPCOL_PROCEDURES_GLOBALES.fWD_gPROC_WRITE_LOG(GWDCPCOL_PROCEDURES_GLOBALES.java:2318)
fr.saxrub.wnat.wdgen.GWDCPCOL_PROCEDURES_GLOBALES.fWD_gPROC_WRITE_LOG(GWDCPCOL_PROCEDURES_GLOBALES.java:2392)
fr.saxrub.wnat.wdgen.GWDCPCOL_PROCEDURES_GLOBALES.fWD_gPROC_INTERNET_TEST_CONNECTION(GWDCPCOL_PROCEDURES_GLOBALES.java:10572)
fr.saxrub.wnat.wdgen.GWDCPCOL_PROCEDURES_GLOBALES.fWD_gPROC_INIT_PROJET(GWDCPCOL_PROCEDURES_GLOBALES.java:14699)
fr.saxrub.wnat.wdgen.GWDPWNAT_Mobile.trtInitProjet(GWDPWNAT_Mobile.java:2627)
fr.pcsoft.wdjava.core.application.e.appelPCode(SourceFile:0)
fr.pcsoft.wdjava.core.application.e.initialize(SourceFile:0)
fr.pcsoft.wdjava.core.application.d.S(SourceFile:0)
fr.pcsoft.wdjava.core.application.f.S(SourceFile:0)
fr.pcsoft.wdjava.core.application.WDAbstractLanceur$b.a(SourceFile:0)
fr.pcsoft.wdjava.core.application.WDAbstractLanceur$b.doInBackground(SourceFile:0)
android.os.AsyncTask$3.call(AsyncTask.java:394)
java.util.concurrent.FutureTask.run(FutureTask.java:266)
android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
java.lang.Thread.run(Thread.java:920)
Thread=id=264
name=wm_task_init_projet
priority=5
groupName=main

===== Application =====
Nom de l'application=GO WNat
Version de l'application=28.4.19.0
Nom du package=fr.saxrub.wnat
Date et heure de lancement=06/02/2024 12:43:08
Version du framework Android=28.0.221.0

===== Appareil =====
Modèle=SM-G975F
Constructeur=samsung
Marque=samsung

===== Système =====
Numéro de version d'Android=12 (Android12)
Api Level Android=31
Mémoire de stockage interne totale=109,95 Go
Mémoire de stockage interne disponible=39,25 Go
Densité de l'écran=560
Résolution de l'écran=1440x3040

MSG2 ;

FATAL EXCEPTION: main
Process: fr.saxrub.wnat.go, PID: 18320
java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4200010 (has extras) } in fr.pcsoft.wdjava.net.a$a@3f13092
at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1816)
at android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8751)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Caused by: fr.pcsoft.wdjava.core.erreur.WDException: Erreur interne.
at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:966)
at java.util.LinkedList$ListItr.next(LinkedList.java:888)
at fr.pcsoft.wdjava.core.context.WDContexte.a(SourceFile:0)
at fr.pcsoft.wdjava.core.context.c.a(SourceFile:0)
at fr.pcsoft.wdjava.core.context.c.c(SourceFile:0)
at fr.pcsoft.wdjava.core.context.WDAppelContexte.a(SourceFile:0)
at fr.pcsoft.wdjava.database.hf.WDHF_Contexte.c(SourceFile:0)
at fr.pcsoft.wdjava.database.hf.WDHF_Contexte.B(SourceFile:0)
at fr.pcsoft.wdjava.database.hf.WDHF_Manager.e(SourceFile:0)
at fr.pcsoft.wdjava.api.WDAPIHF.getFichierSansCasseNiAccent(SourceFile:0)
at fr.saxrub.wnat.wdgen.GWDCPCOL_PROCEDURES_GLOBALES.fWD_gPROC_WRITE_LOG(GWDCPCOL_PROCEDURES_GLOBALES.java:2310)
at fr.saxrub.wnat.wdgen.GWDCPCOL_PROCEDURES_GLOBALES.fWD_gPROC_WRITE_LOG(GWDCPCOL_PROCEDURES_GLOBALES.java:2392)
at fr.saxrub.wnat.wdgen.GWDCPCOL_PROCEDURES_GLOBALES.fWD_gPROC_INTERNET_REFRESH(GWDCPCOL_PROCEDURES_GLOBALES.java:1087)
at java.lang.reflect.Method.invoke(Native Method)
at fr.pcsoft.wdjava.core.WDCallback.a(SourceFile:0)
at fr.pcsoft.wdjava.core.WDCallback.execute(SourceFile:0)
at fr.pcsoft.wdjava.core.WDCallback.execute(SourceFile:0)
at fr.pcsoft.wdjava.core.WDCallback.execute(SourceFile:0)
at fr.pcsoft.wdjava.net.a$a.onReceive(SourceFile:0)
at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1806)
... 9 more

MSG 3

===== Erreur =====
Date et heure=06/02/2024 14:01:55
Message=Erreur interne.
Message système=java.util.ConcurrentModificationException
Traitement=Procédure globale gPROC_INIT_PROJET
Pile WLangage=Procédure globale gPROC_INIT_PROJET
Initialisation de WNAT_Mobile
Pile Java=java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:966)
java.util.LinkedList$ListItr.next(LinkedList.java:888)
fr.pcsoft.wdjava.core.context.WDContexte.a(SourceFile:0)
fr.pcsoft.wdjava.core.context.c.a(SourceFile:0)
fr.pcsoft.wdjava.core.context.c.c(SourceFile:0)
fr.pcsoft.wdjava.core.context.WDAppelContexte.a(SourceFile:0)
fr.pcsoft.wdjava.database.hf.WDHF_Contexte.c(SourceFile:0)
fr.pcsoft.wdjava.database.hf.WDHF_Contexte.B(SourceFile:0)
fr.pcsoft.wdjava.database.hf.WDHF_Manager.e(SourceFile:0)
fr.pcsoft.wdjava.api.WDAPIHF.getFichierSansCasseNiAccent(SourceFile:0)
fr.saxrub.wnat.wdgen.GWDCPCOL_PROCEDURES_GLOBALES.fWD_gPROC_WRITE_LOG(GWDCPCOL_PROCEDURES_GLOBALES.java:2310)
fr.saxrub.wnat.wdgen.GWDCPCOL_PROCEDURES_GLOBALES.fWD_gPROC_WRITE_LOG(GWDCPCOL_PROCEDURES_GLOBALES.java:2392)
fr.saxrub.wnat.wdgen.GWDCPCOL_PROCEDURES_GLOBALES.fWD_gPROC_INTERNET_REFRESH(GWDCPCOL_PROCEDURES_GLOBALES.java:1087)
java.lang.reflect.Method.invoke(Native Method)
fr.pcsoft.wdjava.core.WDCallback.a(SourceFile:0)
fr.pcsoft.wdjava.core.WDCallback.execute(SourceFile:0)
fr.pcsoft.wdjava.core.WDCallback.execute(SourceFile:0)
fr.pcsoft.wdjava.core.WDCallback.execute(SourceFile:0)
fr.pcsoft.wdjava.net.a$a.onReceive(SourceFile:0)
android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1806)
android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(Unknown Source:2)
android.os.Handler.handleCallback(Handler.java:938)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loopOnce(Looper.java:226)
android.os.Looper.loop(Looper.java:313)
android.app.ActivityThread.main(ActivityThread.java:8751)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Thread=id=2
name=main
priority=5
groupName=main

--
Pascal Boulesteix
Applications Visiolittoral et WNat
Registered member
120 messages
Posted on February, 06 2024 - 5:19 PM
Bonjour Pascal,
J'ai déjà eu une erreur de ce type il y a quelques temps...
Si je me rappelle bien, la cause était due au fait que je parcourais une liste ou un tableau (dans du code java) et que je modifiais son contenu en même temps (et surtout comme un crétin... je supprimais des lignes). Ce qui perturbait l'itération.
J'avais résolu ce problème en parcourant la liste en sens inverse
J'espère que ça pourra t'aider
Fabrice
Registered member
950 messages
Popularité : +53 (63 votes)
Posted on February, 07 2024 - 8:57 AM
Bonjour,

Essaye de ne pas mettre ta fonction init dans code init de ton projet mais dans l'init de ta première page de ton projet.

Tu mets toutes tes variable dans l'init du projet mais les fonctions qui permet d'initialiser des variable dans l'init de la première page de ton projets

J'ai eu a peu près le même cas que toi sans trop comprendre, et quand j'ai fais ca j'ai plus eu de problème

nadroj
Registered member
964 messages
Popularité : +16 (20 votes)
Posted on February, 07 2024 - 2:36 PM
J'ai déjà essayé de mettre le code dans la première fenêtre ; retour arrière car le splashscrren ne restait affiché qu'une fraction de seconde et la fenêtre restait noire le temps de l'init de la première fenêtre

--
Pascal Boulesteix
Applications Visiolittoral et WNat
Registered member
328 messages
Posted on February, 19 2024 - 8:51 AM
Bonjour,
Je rebondis sur ce que dit Ndrj :
As-tu des traitements autres que des déclarations dans l'init du projet ?
Je pense à des traitements qui, par exemple, seraient susceptibles de provoquer une demande d'autorisation. Ou bien qui lanceraient des traitement asynchrones incompatibles avec l'apparition de ta 1ère fenêtre entre temps.
Pour ma part, j'ai totalement exclu tout traitement de l'init du projet.
Message modified, February, 19 2024 - 8:52 AM