我的视频课程(基础):《(NDK)FFmpeg打造Android万能音频播放器》

我的视频课程(进阶):《(NDK)FFmpeg打造Android视频播放器》

我的视频课程(编码直播推流):《Android视频编码和直播推流》

我的视频课程(C++ OpenGL):《Android C++ OpenGL教程》

 

 

目录:

        Android-Jni线程(一)— 创建线程

        Android-Jni线程(二)— 线程锁之生产者消费者

        Android-Jni线程(三)— JNI全局回调java方法

 

        对于Android开发来说,到了一定的深度时或多或少都会接触到C/C++底层的,因为开源的优秀的C/C++库实在是太多了,并且C/C++处理某些问题的性能会比用Java来处理高很多,比如:增量更新、FFmpeg、热修复、Jni层的双进程守护等等都是C/C++来开发的,而且解压现在的主流APP都会在它们的lib目录里面看到很多.so动态库,可见C/C++对于Android的重要性。而C/C++处理很多问题都需要放在线程中,所以我们就来讲讲Android-Jni中的线程,希望能对大家有一定的帮助~

        我们都知道Android是基于Linux内核的,而Linux是遵循POSIX线程标准的,什么是POSIX线程(百度百科)?POSIX线程库中有一系列Pthreads API方便我们对Linux线程的操作。所以我们在Android中使用C/C++线程也就转到了使用POSIX线程库。其中我们用到最多的就是以下13个对象或函数,他们都在头文件“pthread.h”中:

 

/*1、pthread_t :用于声明一个线程对象如:pthread_t thread;2、pthread_creat :用于创建一个实际的线程如:pthread_create(&pthread,NULL,threadCallBack,NULL);其总共接收4个参数,第一个参数为pthread_t对象,第二个参数为线程的一些属性我们一般传NULL就行,第三个参数为线程执行的函数( void* threadCallBack(void *data) ),第四个参数是传递给线程的参数是void*类型的既可以传任意类型。3、pthread_exit :用于退出线程如:pthread_exit(&thread),参数也可以传NULL。注:线程回调函数最后必须调用此方法,不然APP会退出(挂掉)。4、pthread_mutex_t :用于创建线程锁对象如:pthread_mutex_t mutex;5、pthread_mutex_init :用于初始化pthread_mutex_t锁对象如:pthread_mutex_init(&mutex, NULL);6、pthread_mutex_destroy :用于销毁pthread_mutex_t锁对象如:pthread_mutex_destroy(&mutex);7、pthread_cond_t :用于创建线程条件对象如:pthread_cond_t cond;8、pthread_cond_init :用于初始化pthread_cond_t条件对象如:pthread_cond_init(&cond, NULL);9、pthread_cond_destroy :用于销毁pthread_cond_t条件对象如:pthread_cond_destroy(&cond);10、pthread_mutex_lock :用于上锁mutex,本线程上锁后的其他变量是不能被别的线程操作的如:pthread_mutex_lock(&mutex);11、pthread_mutex_unlock :用于解锁mutex,解锁后的其他变量可以被其他线程操作如:pthread_mutex_unlock(&mutex);12、pthread_cond_signal :用于发出条件信号如:pthread_cond_signal(&mutex, &cond);13、pthread_cond_wait :用于线程阻塞等待,直到pthread_cond_signal发出条件信号后才执行退出线程阻塞执行后面的操作。*/

 

 

 

 

 

以上就是我们在Android-Jni里面常用到的线程操作,下面举一个简单的创建线程的例子:

演示效果:

Android-Jni线程(一)— 创建线程_第1张图片

 

C++代码如下:

 

#include #include "AndroidLog.h"#include "pthread.h"pthread_t pthread;//线程对象void *threadDoThings(void *data){    LOGD("jni thread do things");    pthread_exit(&pthread);}extern "C"JNIEXPORT void JNICALLJava_com_ywl532_jnithread_JniThread_normalThread(JNIEnv *env, jobject instance) {    // TODO    LOGD("normal thread");    //创建线程    pthread_create(&pthread, NULL, threadDoThings, NULL);}

        这就是一个最简单的创建线程的过程,代码不多,只用到了pthread_t和pthread_create两个对象和函数。下一篇将介绍线程锁的使用(生产者和消费者模型)。

 

 

源码下载:Github:Android-JniThread 欢迎star
 

 

 

更多相关文章

  1. Google Android官方文档进程与线程(Processes and Threads)翻译
  2. Android使用okhttp框架实现带参数Get和Post请求(附服务端完整代码
  3. Android期末项目(一)—— 解析二维数组对象
  4. Android 线程池相关知识
  5. Unity发送参数给Android打开TestActivity0、TestActivity1

随机推荐

  1. Android Ble连接,Ble133异常处理,写入消息
  2. 使用AspectJ在Android中实现Aop
  3. android wifi 热点、socket通讯
  4. Android 终端命令安装 apk 应用程序
  5. Android中一些错误
  6. android wifi 设置 控制开关
  7. 记录代码合并时产生的bug
  8. [置顶] Android Studio 配置
  9. Android(安卓)拍照强制横屏解决...
  10. Android linux adc驱动(s5pv210)