オーディオプレイヤー

1、

1、创建子线程
pthread_t    pthread_create【第三个参数是线程执行的方法】   
pthread_exit【在create第三个参数那里调用】

2、生产者【解码】,消费者【播放出来】
  1) 线程锁就是在多线程中在某一时刻只能有一个线程能对它操作
  2) 操纵对象前上锁,完事,发送条件,解锁
另一个循环:上锁--完事 || 等待的时候,阻塞,而且解锁了,参数【条件,锁】---解锁
  3) cond mutex都需要 声明,init,destroy.  
  cond是signal,wait
  mutex是lock,unlock

3、
《1》  C++ 主线程call Java method    
  All about env
  1) 通过jobject获取jclass
  jclass clz=env->GetObjectClass(jobj);

  2) 获取jmethodid,  method 的 id
  jemthodid jmid=env->GetMethodID(clz, "onError", "(ILjava/lang/String;)V")

  3) 调用方法
  jenv->CallVoidMethod(jobj, jmid, code, jmsg)

 《2》C++子线程call Java method
  通过JVM获取Env
  1) Get JVM 对象: JNI_OnLoad(JavaVM* vm, void* reserved)

  2) 通过JVM获取JniEnv:
  JNIEnv *env;
  jvm->AttachCurrentThread(&env, 0);
  //call Java Method
  jvm->DetachCurrentThread();


4、Code Structure
native-lib和Demo.java联系,然后MainActivity.java里调demo对象
xml跟MainActivity.java连接

xml【button callback】--- MainAcitivity.java方法里调用Demo.java里面的方法

Demo.java【里面的方法实现都在native-lib里】 Load "native-lib"的Library---Java里面调用c++ 



5、Questions
MainActivity.java---OnErrorListener干啥用的?
它监听OnError方法,没有它怎么传过来code和msg

おすすめ

転載: blog.csdn.net/qq_41834780/article/details/106869273