Android和reflection

我得到Android支持reflection的印象。 但是真的吗? 重要的依靠反思是多么明智? 惩罚是什么?

Solutions Collecting From Web of "Android和reflection"

Android支持reflection。

一旦运行了原型,就可以进行基准testing并确定瓶颈。

如果反思,那么考虑尝试caching接口等,使其成为一次性成本,而不是不断地从相同的实例重复地parsing相同的接口。

它支持,甚至build议在你想在一个apk文件兼容多个版本的Android操作系统的情况下。 本文来自官方的Android开发人员博客,介绍如何构build一个只需要一些早期版本的API的应用程序,如果可用,则使用reflection来调用新的API:

向后兼容Android应用程序

一个简单的例子涉及到在Android上使用reflectionhttp://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 } 

在运行时使用reflection从代码隐藏创buildTextView

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

在BusinessCard中,示例代码中也有一个很好的例子。 这种方法不会导致一堆期待被抛出,所以它应该是更多的性能友好。 在我看来,它也更容易实施。 特别是如果它涉及以前未实现的方法。

这里是使用它的地方: http : //developer.android.com/resources/samples/BusinessCard/src/com/example/android/businesscard/ContactAccessor.html

Android当然支持Reflection,我们可以阅读不同的APK或Framework类的方法。 下面是一篇关于在Android中使用Reflection的文章,作为创buildAPI的可能devise方法 – http://prasanta-paul.blogspot.kr/2013/09/java-reflection-as-android-api.html