2013-05-18 3 views
7

में DeleteLocalRef को कॉल करना मैं जेएनआई विधि से एक jstring लौट रहा हूं। मूल्य वापस करने से पहले मैं स्थानीय संदर्भ को हटा देता हूं।जावा मूल इंटरफ़ेस

JNIEXPORT jstring JNICALL TestJNIMethod(JNIEnv* env, jclass) 
{ 
    jstring test_string = env->NewStringUTF("test_string_value"); 
    env->DeleteLocalRef(test_string); 
    return test_string; 
} 

बुला जावा पद्धति अभी भी या लौटे jstring उपयोग करने में सक्षम नहीं होगा कचरा कलेक्टर सफाई स्मृति होता?

उत्तर

18

नहीं, यह नहीं होगा, हालांकि आपका कोड आईसीएस की तुलना में एंड्रॉइड संस्करणों पर काम करेगा। इस कोड पर आईसीएस से सही ढंग से असफल हो जाएगा।

आम तौर पर जेएनआई फ़ंक्शन जावा पर लौटने के बाद आपको स्थानीय संदर्भों को हटाने की आवश्यकता नहीं होती है, संदर्भ जीसीएड प्राप्त करेंगे।

उस नियम का अपवाद यह है कि यदि आप उनमें से बहुत से बनाते हैं, शायद एक लूप में। फिर स्थानीय संदर्भ तालिका भरना संभव है। IBM: Overview of JNI object references देखें।

आपको JNI Local Reference Changes in ICS पढ़ना चाहिए। भले ही आप एंड्रॉइड के लिए नहीं लिख रहे हैं, फिर भी यह कई सामान्य गलतियों की पहचान करता है।

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