2017-06-28 3 views
2

Manchmal in AOSP Quellen sehe ich private static final boolean Debug-Flag mit false als Wert. Und es gibt Debug-Ausgabe, wenn dieses Flag true ist. Etwas wie this:Wie verwendet man DEBUG-Flags in AOSP-Klassen?

private static final boolean DEBUG_DRAW = false; 
private static final Paint DEBUG_DRAW_PAINT; 
static { 
    DEBUG_DRAW_PAINT = DEBUG_DRAW ? new Paint() : null; 
    if (DEBUG_DRAW_PAINT != null) { 
     DEBUG_DRAW_PAINT.setAntiAlias(true); 
     DEBUG_DRAW_PAINT.setColor(Color.MAGENTA); 
    } 
} 

Wer und wie verwendet es? Ist es möglich, dieses Flag irgendwie zu wechseln und Debug-Ausgabe von AOSP-Klassen zu nehmen?

Antwort

0

Alles ist möglich mit Java und Reflection

Pro:

  • Ich glaube nicht, dass es als dass

Cons etwas mächtiger ist:

  • Diese Technik wird zur Laufzeit ausgeführt, also Code exe zuvor (z.B. Klassen laden) ... naja, ist schon ausgeführt. Sie sehen also nicht die Auswirkungen

  • langsam zur Laufzeit

  • Dangerous. Verwenden Sie es sorgfältig

Sie einen beliebigen Wert ändern können mit diesem:

Class<?> klass = ... 
Field field = klass.getDeclaredField("DEBUG_DRAW"); 
field.setAccesible(true); 
field.set(
    null, // as this is an static attribute we don't need anything here... 
    true // set true as new value 
); 

Wie ich bereits sagte vor der Reflexion eine gefährliche Technik ist so, dass snipped mehrere Ausnahmen auslösen, wenn falsch verwendet, so müssen Sie behandeln sie