Android и отражение - PullRequest
       40

Android и отражение

31 голосов
/ 18 ноября 2009

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

Ответы [ 5 ]

21 голосов
/ 18 ноября 2009

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

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

15 голосов
/ 18 ноября 2009

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

После запуска прототипа вы можете тестировать и определять свои узкие места.

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

8 голосов
/ 13 февраля 2012

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

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); 
2 голосов
/ 05 февраля 2010

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

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

0 голосов
/ 19 сентября 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...