Bonjour,

J'ai parfois (1 fois sur 5 ou 6 je dirais) quand je quitte mon application des erreurs comme la suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
04-10 15:30:20.715: A/libc(25759): @@@ ABORTING: INVALID HEAP ADDRESS IN dlfree
04-10 15:30:20.715: A/libc(25759): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)
Ces erreurs ne se voient pas au niveau du téléphone quand je quitte mais quand je redémarre j'ai un écran noire qui fait planter le téléphone pendant 15/20 secondes.

Mon code n'utilise pas le NDK, mais utilise le Bluetooth, le MediaPlayer et charge pour environ 1Mo d'image qui utilisent des lib C.
Comment puis-je savoir d'où provient cette erreur ? Et pourquoi en Java n'ai-je pas une Exception ?


La seule piste que j'ai c'est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
04-10 16:21:04.046: V/BluetoothSocket.cpp(30784): destroyNative
qui est affiché 2 fois dans les logs alors que la fonction destroyNative n'est appelé que par la méthode close() de BluetoothSocket.java qui fait d'abord :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 if (mSocketState == SocketState.CLOSED) return;
Bizarre du coup. Encore plus bizarre la classe BluetoothSocket.java contient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
    /** @hide */
    @Override
    protected void finalize() throws Throwable {
        try {
            close();
        } finally {
            super.finalize();
        }
    }
J'ai toujours lu qu'utiliser finalize() pour libérer les ressources était une mauvaise idée... J'ai comme l'impression que Android/GC close() la socket sans attendre que mes threads de lecture/écriture aient fermés leurs output/input streams.

Est-ce que quelqu'un aurait une idée comment détecter/corriger mon problème ?