2009-11-18 10 views
31

मुझे लगता है कि एंड्रॉइड प्रतिबिंब का समर्थन करता है। लेकिन क्या यह वास्तव में है? प्रतिबिंब पर भरोसा करना कितना समझदार होगा? जुर्माना क्या है?एंड्रॉइड और प्रतिबिंब

उत्तर

15

एंड्रॉइड प्रतिबिंब का समर्थन करता है।

एक बार जब आपके पास प्रोटोटाइप चल रहा है, तो आप बेंचमार्क कर सकते हैं और अपनी बाधाओं को निर्धारित कर सकते हैं।

यदि इसका प्रतिबिंब है, तो इंटरफेस को कैश करने की कोशिश करने पर विचार करें और इस तरह से एक ही लागत को बार-बार उसी इंटरफेस को लगातार हल करने के बजाय इसे एक-ऑफ लागत बनाने के लिए विचार करें।

+4

मुझे लगता है कि सवाल वास्तव में है अगर किसी को पहले से ही विभिन्न उपकरणों पर मानक किया एक संभव डिजाइन दृष्टिकोण के रूप में एंड्रॉयड में प्रतिबिंब का उपयोग करने पर एक लेख है। –

21

यह समर्थित है, और उस स्थिति में भी सिफारिश की जाती है जहां आप एंड्रॉइड ओएस के एकाधिक संस्करणों के साथ एक apk फ़ाइल में संगतता चाहते हैं। आधिकारिक Android डेवलपर ब्लॉग से यह आलेख वर्णन करता है कि कैसे एक एप्लिकेशन एपीआई के केवल कुछ शुरुआती संस्करण की आवश्यकता है कि निर्माण करने के लिए, और नए एपीआई आह्वान करने के लिए अगर वे उपलब्ध हैं प्रतिबिंब का उपयोग करता है:

Backward compatibility for Android applications

2

एक अच्छा उदाहरण नहीं है बिजनेसकार्ड में नमूना कोड में भी प्रतिबिंब का। इस विधि के परिणामस्वरूप निष्पादन का एक गुच्छा फेंक दिया जाएगा, इसलिए यह अधिक प्रदर्शन अनुकूल होना चाहिए। यह भी मेरी राय में, लागू करने में आसान है। विशेष रूप से अगर यह पहले अनुपूरक विधि से संबंधित है।

यहाँ है जहाँ यह प्रयोग किया जाता है: http://developer.android.com/resources/samples/BusinessCard/src/com/example/android/businesscard/ContactAccessor.html

7

एक सरल एंड्रॉयड 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 
}  



पर प्रतिबिंब का उपयोग प्रतिबिंब

उपयोग करने के साथ कार्यावधि में codebehind से एक 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); 



क्रम निश्चित रूप से

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

एंड्रॉयड पर() विधि setText को पहुँचना प्रतिबिंब का समर्थन करता है और हम एक अलग APK या फ्रेमवर्क वर्ग के तरीकों पढ़ सकते हैं। यहाँ बनाने के लिए API- http://prasanta-paul.blogspot.kr/2013/09/java-reflection-as-android-api.html

+4

मुझे "बिल्कुल" बिट पसंद नहीं है। जावा वातावरण के बहुत सारे हैं जिनमें प्रतिबिंब मौजूद नहीं है। जावाकार्ड और जावा एमई दिमाग में आते हैं। –