Подтвердить что ты не робот

Android и отражение

У меня создается впечатление, что Android поддерживает рефлексию. Но действительно ли это? Насколько разумно было бы полагаться на размышления? Какое наказание?

4b9b3361

Ответ 1

Android поддерживает отражение.

Как только у вас запущен прототип, вы можете проверить и определить свои узкие места.

Если его отражение, то подумайте о попытке кэширования интерфейсов и т.д., чтобы сделать его разовой стоимостью, а не постоянно разрешать одни и те же интерфейсы из тех же экземпляров повторно.

Ответ 2

Он поддерживается и даже рекомендуется в ситуации, когда требуется совместимость с несколькими версиями ОС Android в одном файле apk. В этой статье из официального блога разработчиков Android описано, как создать приложение, для которого требуется только некоторая ранняя версия API, и использует отражение для вызова новых API, если они доступны:

Обратная совместимость для приложений Android

Ответ 3

простой пример, связанный с использованием отражения на android 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
}    



Создание TextView из кода во время выполнения с использованием отражения

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); 



Достижение метода setText() во время выполнения

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); 

Ответ 4

В примерном коде есть хороший пример отражения, в BusinessCard. Этот метод не приведет к появлению кучи ожиданий, поэтому он должен быть гораздо более дружелюбным к производительности. Это также, на мой взгляд, проще реализовать. Особенно, если речь идет о ранее не реализованном методе.

Вот где он используется: http://developer.android.com/resources/samples/BusinessCard/src/com/example/android/businesscard/ContactAccessor.html

Ответ 5

Android, конечно, поддерживает Reflection, и мы можем читать методы другого класса APK или Framework. Вот статья об использовании Reflection в Android в качестве возможного подхода к созданию API- http://prasanta-paul.blogspot.kr/2013/09/java-reflection-as-android-api.html