J'utilise OpenCV SDK pour Android pour développer un traitement et une correspondance en temps réel.
La principale logique de traitements OpenCV est dans une fonction JNI
.
Le problème est que parfois (juste parfois) mon application se bloque sans erreur, j'ai donc ignoré le problème jusqu'à ce que j'ai fini de développer l'algorithme.
J'ai commencé à enquêter sur l'erreur et c'est définitivement dans la partie JNI.
Voici l'erreur que j'entre dans le Log
A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 27424 (Thread-8)
A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
J'ai beaucoup cherché sur Internet et j'ai trouvé cette solution
<activity
Android:hardwareAccelerated="false" />
Cela a fonctionné pendant 2 jours et maintenant, je reçois la même erreur.
Quel est le problème et comment puis-je le résoudre?
Toute aide serait appréciée et merci d'avance.
ÉDITER
Je devrais ajouter que ma candidature prend une image de référence à partir de la galerie et la comparer à l'aide d'OPENCV avec un flux d'images en temps réel.
Si je choisis une image de la galerie et de l'application se bloque, cette image ne fonctionnera plus et si je prends une nouvelle image ou une image qui a fonctionné auparavant, l'application fonctionne bien.
Dans mon cas, j'ai réduit le problème pour charger une annonce admob dans un fragment ... mais seulement lorsque l'écran rendait pour la deuxième fois. Exemple: Je laisse l'écran, puis je retourne à l'écran, via FragmentManager.
Dans tous les cas, s'il s'agit d'un avantage, vous pouvez corriger en désactivant l'accélération matérielle dans l'androidmanifest.xml, voire mieux, directement sur le composant AD:
val ADREQUEST: ADREQUEST = ADREQUEST.BUILDER (). Build () // Désactiver l'accélération matérielle à ce point de vue, car il provoque une collision de l'écran sur la recharge. ADVIEW.SETLAYERTYTYPE (VIEW.LAYER_TYPE_SOFTWARE, NULL) ADVIEW.LOADAD (ADREQUEST)
C'était un peu difficile la rétrécir à cela, mais j'ai remarqué ceci:
I/Dynamitemodule: Considérant le module local com.google.dyroid.gms.ads.dynynamite: 0 et module distant com.google.dyroid.gms.ads.dynamite: 204204100
juste au-dessus du message
"Signal Fatal 11 (SIGSEGV), CODE 1 (SEGV_MAPERR), ADDR de défaut 0x0 dans TID 19705 (Renderthread), PID 19631"
Je suppose que c'était admis, et cela m'a finalement conduit à cette réponse.
Cela a fonctionné pour moi. J'espère que cela aide les autres.
J'ai résolu par
redémarré mon smartphone (périphérique physique).
Si vous utilisez Android Studio, passez à fichier -> Invalidate cache & redémarrage.