Очистка JNI и потоки демонов в Android NDK
Таков поток JNI
JNI_onLoad - get JavaVM (get jclass для вызова статических методов)
Затем нужно вызвать что-то из Java на C:
GetEnv () , чтобы получить JNIEnv и AttachCurrentThread(), чтобы использовать его.
Вызов метода java
Процесс java метод возвращает значение.
DetachCurrentThread () - свободный поток
Somethere в конце концов
DestroyJavaVM()
Ну вопросы являются:
- есть, чтобы вызвать DestroyJavaVM() и если мне нужно это сделать? В ондестрой () в моей основной деятельности?
- является ли JNI_onUnload когда-либо вызовом и что я должен там убрать?
- нужен ли мне как-то свободный jclass, который я храню в статическом глобальном vaiable?
- сделать JNI, у бесплатные местные из области jarrays/элементы jarrays, строки и строки символов, jobjects после возврата из функции или я должен всегда держать глаза на то, что (называя env - > Release(что-то))
- каковы преимущества и использование AttachCurrentThreadAsDaemon()?
1 ответ:
DestroyJavaVM() должен быть вызван, когда вы больше не используете JVM (вероятно, в конце вашей программы).
JNI_onUnload вызывается при выгрузке класса (например, потому, что его загрузчик был удален).
Чтобы освободить класс, обнулите его ссылки и удалите его загрузчик классов.
JNI jarrays/jarrays элементы, строки и jobjects либо выделяются JVM, либо используются буфером C (которым вы управляете); см. #3 для первого дело.
AttachCurrentThreadAsDaemon () сообщает JVM, что он не должен ждать выхода потока после завершения работы (полезно для демонов).
Удачи!