Il mio collega e io stiamo vivendo un comportamento molto strano con un oggetto Android Canvas.Errore di segnale fatale Android 11 SIGSEGV su diverse versioni di JellyBean
Abbiamo a che fare con un oggetto canvas inizializzato e sono in modo selettivo ottenendo un errore irreversibile 11 Errore tra 2 tablet Nexus 7; uno dei quali esegue 4.2.2 e funziona bene, e l'altro che esegue 4.3 e si blocca. Stiamo cercando di capire come risolvere il problema che consiste nel determinare se l'errore è da parte nostra o in qualche modo un problema tecnico nell'API di Android (improbabile).
L'errore si verifica quando si tenta di chiamare canvas.getWidth()
sull'oggetto. Codice
nostro Java: (non che probabilmente conta, ma Rect è dalla nostra base di codice, non è un android.graphics.Rect
)
public Rect getViewportBounds() {
Canvas can = _diagram._canvas;
Rect vb = _viewportBounds;
if (can == null) return vb;
Point pos = _position;
int[] approxWindowVals = { (int) pos.getX(), (int) pos.getY() };
double sc = _scale;
vb._set(approxWindowVals[0], approxWindowVals[1], Math.max(can.getWidth(), 0)/sc, Math.max(can.getHeight(), 0)/sc);
return vb;
}
Le nostre informazioni da LogCat è qui
08-09 16:49:14.883: W/View(4083): requestLayout() improperly called by com.nwoods.go.Viewport{41dfcb08 V.ED.... ......I. 0,0-0,0} during layout: running second layout pass 08-09 16:49:14.893: W/View(4083): requestLayout() improperly called by com.nwoods.go.Viewport{41dfcb08 V.ED.... ......I. 0,0-0,0} during second layout pass: posting in next frame 08-09 16:49:14.923: W/View(4083): requestLayout() improperly called by com.nwoods.go.Viewport{41dfcb08 V.ED.... ......I. 0,0-0,0} during layout: running second layout pass 08-09 16:49:14.943: D/abc(4083): onDraw 08-09 16:49:14.943: W/View(4083): requestLayout() improperly called by com.nwoods.go.Viewport{41dfcb08 V.ED.... ......I. 0,0-0,0} during second layout pass: posting in next frame 08-09 16:49:14.973: W/View(4083): requestLayout() improperly called by com.nwoods.go.Viewport{41dfcb08 V.ED.... ......I. 0,0-0,0} during layout: running second layout pass 08-09 16:49:14.983: W/View(4083): requestLayout() improperly called by com.nwoods.go.Viewport{41dfcb08 V.ED.... ......I. 0,0-0,0} during second layout pass: posting in next frame 08-09 16:49:15.003: W/View(4083): requestLayout() improperly called by com.nwoods.go.Viewport{41dfcb08 V.ED.... ......I. 0,0-0,0} during layout: running second layout pass 08-09 16:49:15.033: A/libc(4083): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 4083 (egressiontester)
Le nostre configurazioni hardware sono le seguenti:
+---------+------------+-----------------------+ | Tablet | Android OS | Reached Error | +---------+------------+-----------------------+ | Nexus 7 | 4.2.2 | NO | | Nexus 7 | 4.3 | YES | +---------+------------+-----------------------+
Se avete qualche idea sul motivo per cui ciò accade, fatemelo sapere. Potremmo dover ristrutturare la tela, ma siamo entrambi piuttosto confusi che una classe tanto comune come Canvas si sta comportando diversamente su due tablet identici.
La ringrazio molto per il vostro sostegno :)
Usi il canvas con accelerazione hardware? Hai provato a accendere/spegnere l'accelerazione hardware? –
@ AndrzejDuś, l'accelerazione hardware è stata inizialmente disattivata e attivandola ** ha ** risolto il problema, tuttavia stiamo sviluppando una libreria di classi e quindi dobbiamo scrivere il codice per il maggior numero possibile di utenti e casi d'uso. –