การแนะนำรายละเอียดเกี่ยวกับกระบวนการลงทะเบียนของฟังก์ชัน Java Jni
เมื่อเราเรียกรหัสดั้งเดิมใน Java โดยทั่วไปจะถูกนำไปใช้ผ่าน JNI เราจำเป็นต้องโหลดไฟล์ไลบรารีท้องถิ่นในคลาส Java ประกาศวิธีการดั้งเดิมจากนั้นเรียกมันว่าจะต้องเรียกว่าจะเรียกว่าที่ไหน สำหรับการใช้งานเฉพาะของวิธีการดั้งเดิมใน Java มันถูกส่งมอบให้กับเลเยอร์ดั้งเดิม ข้อกำหนดเบื้องต้นสำหรับเราในการเรียกใช้ฟังก์ชั่นที่เกี่ยวข้องในรหัสท้องถิ่นใน Java อย่างถูกต้องคืออะไร? คำตอบคือการสร้างการติดต่อแบบหนึ่งต่อหนึ่งระหว่างวิธีการดั้งเดิมใน Java และฟังก์ชั่นในรหัสท้องถิ่นผ่านกลไกบางอย่าง กลไกนี้คืออะไร? มันเป็นกลไกการลงทะเบียนของฟังก์ชัน JNI
มีสองวิธีในการลงทะเบียนฟังก์ชั่น JNI หนึ่งคือวิธีการลงทะเบียนแบบคงที่และอีกวิธีหนึ่งคือวิธีการลงทะเบียนแบบไดนามิก มาแนะนำวิธีการใช้งานสองวิธีด้านล่าง
1. การลงทะเบียนแบบคงที่
1. หลักการดำเนินการ: สร้างการติดต่อแบบหนึ่งต่อหนึ่งระหว่างวิธี Java และฟังก์ชั่น JNI ตามชื่อฟังก์ชัน
2. กระบวนการดำเนินการ:
①เขียนรหัส Java;
②รวบรวมรหัส Java และสร้างไฟล์. class;
③ใช้คำสั่ง Javah เพื่อสร้างไฟล์ JNI .H โดยใช้ไฟล์. class ที่สร้างขึ้น
file ไฟล์ส่วนหัว JNI ที่สร้างขึ้นมีการประกาศฟังก์ชั่น Java ในชั้น JNI;
3. ข้อเสีย:
①การเขียนนั้นไม่สะดวกมากเนื่องจากชื่อของฟังก์ชั่นเลเยอร์ JNI จะต้องเป็นไปตามรูปแบบเฉพาะและชื่อมีความยาวเป็นพิเศษ
②มันจะทำให้เกิดการทำงานจำนวนมากสำหรับโปรแกรมเมอร์เนื่องจากไฟล์ส่วนหัวของ JNI จะต้องเขียนสำหรับคลาส Java ทั้งหมดที่ประกาศฟังก์ชั่นดั้งเดิม
③โปรแกรมกำลังทำงานไม่มีประสิทธิภาพเพราะเมื่อเรียกฟังก์ชั่นดั้งเดิมเป็นครั้งแรกคุณต้องค้นหาฟังก์ชั่นท้องถิ่นที่สอดคล้องกันในเลเยอร์ JNI ตามชื่อฟังก์ชั่นจากนั้นสร้างความสัมพันธ์ที่สอดคล้องกัน กระบวนการนี้ใช้เวลานาน
2. การลงทะเบียนแบบไดนามิก
1. หลักการการนำไปใช้: บอกฟังก์ชั่นดั้งเดิมของตัวชี้ไปยังฟังก์ชั่นที่เกี่ยวข้องโดยตรงใน JNI;
2. กระบวนการดำเนินการ:
①ใช้โครงสร้าง jninativeMethod เพื่อบันทึกการติดต่อระหว่างฟังก์ชั่นดั้งเดิมของ Java และฟังก์ชั่น JNI;
②บันทึกการติดต่อระหว่างฟังก์ชั่นดั้งเดิมทั้งหมดและฟังก์ชั่น JNI ในอาร์เรย์ jninativeMethod;
③หลังจากการโหลดไลบรารี JNI Dynamic ผ่าน System.LoadLibrary ใน Java โทรหาฟังก์ชั่น JNI_ONLoad และเริ่มการลงทะเบียนแบบไดนามิก
④การทำงานของ Androidruntime :: registernativemethods จะถูกเรียกใน JNI_ONLOAD สำหรับการลงทะเบียนฟังก์ชั่น;
⑤การโทรครั้งสุดท้ายไปยัง JniregisternativeMethods ใน Androidruntime :: RegisternativeMethods การลงทะเบียนที่สมบูรณ์
3. ข้อดี: การเอาชนะข้อเสียของการลงทะเบียนแบบคงที่
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!