L'applicazione si schianta Android 4.3+ in codice nativo con app utilizzando calcoli a matrice su una tela

StackOverflow https://stackoverflow.com//questions/20022243

Domanda

Prima di trascorrere più tempo a leggere questo che necessario: risponderò a questa domanda da solo. Ho trascorso un giorno intero debug di questo e ho pensato che dovrei condividere.

Io sono lo sviluppatore per un'applicazione che è fondamentalmente una sorta di navigazione girevole a turno sui campi da golf. Come tale, ho immagini che devono essere ruotate per rendere l'immagine orientata al nord. Questo ovviamente richiede alcune trasformazioni a matrice.

Dopo Android 4.3 è stato spinto a HTC One, ho ricevuto alcune lamentele che l'app stava semplicemente chiudendo ogni volta che qualcuno voleva usarlo. "Purtroppo si è fermato."

La mia sessione di debug iniziale non ha cancellato nulla. Non c'era un'eccezione lanciata, quindi nulla per passo con inizialmente. Ho trovato il seguente nei miei registri:

.

11-12 14: 12: 56.257: Assert / libc (5206): segnale fatale 11 (Sigsegv) a 0x00000000 (codice= 1), thread 5206 (ndroid.appname)

Con il nulla da iniziare davvero a debug, ero a lungo termine della vecchia scuola attraverso tutto, identificando i probabili sospetti e un sacco di caffeina, ma alla fine l'ho capito con l'aiuto di un collega che aveva scritto il Codice che si è rivelato essere il colpevole.

È stato utile?

Soluzione

Come si scopre, questa linea stava causando tutti i problemi: canvas.setmatrix (null);

L'intento di questa linea era semplice: ripristinare la matrice di trasformazione nella matrice di identità in modo da poter essere applicata una nuova trasformazione. Secondo La documentazione , Questo è permesso:

.

Sostituire completamente la matrice corrente con la matrice specificata. Se il parametro Matrix è null, la matrice corrente viene ripristinata all'identità.

Apparentemente le persone che lavorano su Android hanno rimosso questo controllo per un parametro NULL dal codice 4.3, ma non ha ritenuto necessario aggiornare la documentazione o un'eccezione decente. Invece, questa linea si schianta di tutto senza un indizio di dove è successo e perché.

Ho archiviato un rapporto del bug se nessuno è interessato. Spero che questo o questo thread aiuto qualcuno nella stessa situazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top