我的C++中的一个线程A通过jni调用Android中的一个函数public void B(),请问(1)A调用B后,函数B在线程A中执行还是在Android线程中执行?(2)如果知道的话,请说说这里和涉及到的虚拟机线程到底是怎么样的关系。谢谢!

解决方案 »

  1.   

    细细解释太麻烦,简单来说,就是UI线程和其他线程的关系,jni也一样,底层启动的线程,也可以归纳为其他线程,肯定运行在UI线程之外(即函数B在线程A中执行),其调用java方法时,如果要操作UI,必须使用线程通信
      

  2.   

    好像没听说JNI调用还有单独线程啊!
    如果从jni是运行在单独线程上,那么从java调用jni的东西,是不是都应该是异步的?但是事实都是同步的啊!难道在调用的时候,调用线程挂起了? 等待jni线程运行处结果才唤醒主线程? 那似乎有脱裤子放屁的感觉!
      

  3.   


    从java中的主线程调用jni当然是同步的。我现在是在c++中的一个字线程中调用Android主线程中的函数B,
    我想知道的是,
    我调B后B在执行的时候B是在主线程还是在我的C++字线程中?
      

  4.   

    同线程中的函数互相调用,函数执行完成就会返回,直接return就行,不同线程之间,使用接口回调。java和C的通信,java调用c,需要声明native方法,这个jni里面应该有的
      

  5.   

    c调用java也是同步的,在一个线程的,应该没什么疑问吧!