2011-12-06 18 views
8

मुख्य लक्ष्य एंड्रॉइड सिस्टम क्लास (गतिविधि, व्यू इत्यादि) को अपने कार्यान्वयन के साथ ओवरराइड करना है। कस्टम वर्ग लोड करने के लिएकस्टम क्लास लोडिंग/ओवरराइडिंग एंड्रॉइड-नेटिव क्लासेस

http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html

classloader कार्यान्वित किया जाता है, गैर प्रणाली वर्ग (कस्टम वर्ग) लोड हो रहा है काम करता है।

लेकिन जब मैं अपने कार्यान्वयन के साथ गतिविधि लोड करने का प्रयास - यह लोड नहीं करता है, क्योंकि classloader पहले से ही अपने कैश में इस वर्ग के होते हैं: बजाय अपने ही वर्ग सुई

/** 
* Returns the class with the specified name if it has already been loaded 
* by the virtual machine or {@code null} if it has not yet been loaded. 
* 
* @param className 
*   the name of the class to look for. 
* @return the {@code Class} object or {@code null} if the requested class 
*   has not been loaded. 
*/ 
protected final Class<?> findLoadedClass(String className) { 
    ClassLoader loader; 
    if (this == BootClassLoader.getInstance()) 
     loader = null; 
    else 
     loader = this; 
    return VMClassLoader.findLoadedClass(loader, className); 
} 

मैं कैसे बदल सकता वर्ग लोडर प्रणाली का?

उत्तर

0

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

3

मैं एक ब्लॉग पोस्ट से this solution मिल गया है। मुझे पता है कि यह एक लिंक पोस्ट करने के लिए स्टैक ओवरफ्लो नीतियों के खिलाफ है, लेकिन पाठ स्थानांतरित होने के लिए बहुत बड़ा है।

विचार कुछ सी कोड है कि निम्न स्तर के वर्ग लोड हो रहा है तंत्र को ओवरराइड करता है जिस तरह से एक विधि निष्पादित किया जाता है लिख सकते हैं और इस प्रकार ओवरराइड करने के लिए है। मुझे उम्मीद है कि यह किसी के लिए कुछ मदद हो सकती है।

संबंधित मुद्दे