J'ai une application Android qui se compose de quelques threads natifs (non attachés à JVM) qui doivent pouvoir appeler les méthodes d'un objet Java. La manière dont j'allais le faire consistait à créer une fonction JNI que j'appelle de l'objet Java pertinent, ce qui me permet d'obtenir et de mettre en cache les identifiants de méthode d'objet java, JNIEnv et les références d'objet dans un environnement natif statique. structure de données pour que mes threads natifs puissent (thread sécurisé) accéder aux méthodes requises (par exemple using (* env) -> CallVoidMethod (env, this, JavaMethodID, ...), etc;Multithreading natif et JNI
Je ne suis pas convaincu approche va fonctionner, puisque j'ai lu que le pointeur JNIEnv ne peut pas être partagé entre threads, et que seuls les threads qui sont attachés à la JVM peuvent faire ce genre de chose ...
Est-ce une approche viable?
'JNIEnv' est valable uniquement pour le thread courant, mais' JavaVM' est mondiale . Donc, enregistrez un pointeur sur ce point, ainsi que des références globales à vos classes, objets, ID de méthode, et cela fonctionnera. –
http://developer.android.com/training/articles/perf-jni.html – fadden