2009-11-18 37 views
31

Tôi có ấn tượng rằng Android hỗ trợ sự phản chiếu. Nhưng nó thực sự? Làm thế nào hợp lý nó sẽ được dựa vào sự phản ánh rất nhiều? Hình phạt là gì?Android và phản chiếu

Trả lời

15

Android hỗ trợ phản chiếu.

Khi bạn đã có một mẫu thử nghiệm đang chạy, bạn có thể đo điểm chuẩn và xác định các nút cổ chai của mình.

Nếu phản ánh của nó, hãy xem xét cố gắng lưu vào bộ nhớ cache giao diện và làm cho nó trở thành một chi phí một lần, thay vì liên tục giải quyết cùng một giao diện từ cùng một trường hợp nhiều lần.

+4

Tôi đoán câu hỏi là thực sự nếu ai đó đã làm điểm chuẩn trên các thiết bị khác nhau. –

21

Nó được hỗ trợ và thậm chí được đề xuất trong trường hợp bạn muốn tương thích với nhiều phiên bản của hệ điều hành Android trong một tệp apk. Bài viết này từ chính thức phát triển Android Blog mô tả làm thế nào để xây dựng một ứng dụng mà chỉ đòi hỏi một số phiên bản đầu tiên của API, và sử dụng phản ánh để gọi API mới nếu họ có sẵn:

Backward compatibility for Android applications

2

Có một ví dụ tốt đẹp của sự phản chiếu trong mã mẫu là tốt, trong BusinessCard. Phương pháp này sẽ không dẫn đến một loạt các expections được ném, do đó, nó phải được nhiều hơn nữa hiệu suất thân thiện. Nó cũng là, theo ý kiến ​​của tôi, dễ dàng hơn để thực hiện. Đặc biệt là nếu nó liên quan đến một phương pháp chưa được thực hiện trước đó.

Đây là nơi nó được sử dụng: http://developer.android.com/resources/samples/BusinessCard/src/com/example/android/businesscard/ContactAccessor.html

7

một ví dụ đơn giản liên quan đến sử dụng phản chiếu trên 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 
}  



Tạo một TextView từ codebehind khi chạy với việc sử dụng phản ánh

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



Vươn tới setText() phương pháp tại runtime

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 dĩ nhiên hỗ trợ và Reflection chúng có thể đọc các phương pháp của một APK hoặc khung lớp khác. Đây là bài viết về cách sử dụng Phản ánh trong Android như một phương pháp thiết kế có thể tạo API- http://prasanta-paul.blogspot.kr/2013/09/java-reflection-as-android-api.html

+4

Tôi không thích bit "dĩ nhiên". Có rất nhiều môi trường Java trong đó sự phản chiếu không tồn tại. JavaCard và Java ME đến với tâm trí. –

Các vấn đề liên quan