2009-11-18 14 views
31

Tengo la impresión de que Android admite la reflexión. Pero, ¿realmente? ¿Cuán sensato sería confiar en la reflexión? ¿Cuál es la pena?Android y reflejo

Respuesta

15

Android admite la reflexión.

Una vez que tiene un prototipo en ejecución, puede comparar y determinar sus cuellos de botella.

Si se refleja, entonces considere intentar almacenar en la memoria caché las interfaces y hacer que sea un costo único, en lugar de resolver continuamente las mismas interfaces de las mismas instancias repetidamente.

+4

Supongo que la pregunta es si alguien ya hizo los puntos de referencia en varios dispositivos. –

21

Es compatible, e incluso recomendado, en la situación en la que desea compatibilidad con múltiples versiones del sistema operativo Android en un solo archivo apk. Este artículo de la Blog oficial de desarrolladores de Android se describe cómo crear una aplicación que requiere sólo una versión temprana de la API, y utiliza la reflexión para invocar nuevas API si están disponibles:

Backward compatibility for Android applications

2

Hay un buen ejemplo de reflexión en el código de muestra también, en BusinessCard. Este método no generará un montón de expectativas, por lo que debería ser mucho más amigable para el rendimiento. También es, en mi opinión, más fácil de implementar. Especialmente si se trata de un método no implementado previamente.

Aquí es donde se utiliza: http://developer.android.com/resources/samples/BusinessCard/src/com/example/android/businesscard/ContactAccessor.html

7

un ejemplo sencillo en relación con el uso de la reflexión sobre androide http://aaarkonusurum.blogspot.com/2012/02/android-ile-reflection.html

Class x = Object.class; 
Constructor[] constructors = x.getDeclaredConstructors(); 
Field[] fields = x.getDeclaredFields(); 
Method[] methods = x.getDeclaredMethods(); 
for (Constructor constructor : constructors) { 
    //constructors 
} 
for (Field field : fields) { 
    //fields 
} 
for (Method method : methods) { 
    //methods 
}  



Creación de una TextView de código subyacente en tiempo de ejecución con el uso de la reflexión

String x = TextView.class.toString().replace("class ", ""); 
Class<?> cls = Class.forName(x); 
Class<?> param[] = new Class[1]; 
param[0] = Context.class; //Context=o an ki context ==> [activity.class] 
Constructor<?> ct = cls.getConstructor(param); 
Object paramVal[] = new Object[1]; 
paramVal[0] = context; 
Object retobj = ct.newInstance(paramVal); 



Llegar a setText método() en el tiempo de ejecución

Class methodParam[] = new Class[1]; 
methodParam[0] = java.lang.CharSequence.class; 
Method method = cls.getMethod("setText", methodParam); 
Object arglist[] = new Object[1]; 
arglist[0] = new String("THIS TEXTVIEW HAS BEEN CREATED ON RUN TIME"); 
method.invoke(retobj, arglist); 
0

Android por supuesto apoya Reflexión y podemos leer métodos de una clase APK o marco diferente. Aquí hay un artículo sobre el uso de Reflection en Android como un posible enfoque de diseño para crear API- http://prasanta-paul.blogspot.kr/2013/09/java-reflection-as-android-api.html

+4

No me gusta el bit "por supuesto". Hay muchos entornos Java en los que la reflexión es inexistente. JavaCard y Java ME vienen a la mente. –

Cuestiones relacionadas