Bonjour,
J'ai parfois (1 fois sur 5 ou 6 je dirais) quand je quitte mon application des erreurs comme la suivante
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 :
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 :
if (mSocketState == SocketState.CLOSED) return;
Bizarre du coup. Encore plus bizarre la classe BluetoothSocket.java contient :
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 ?
Partager