android ndk 线程和android aidl 技术

示例地址:https://github.com/bitchtoy/ndk-aidl/tree/master

demo描述:

1.使用ndk 和 aidl跨进程通讯技术的一个学习示例

概要:

1. JavaVm 和 JNIEvn简述

2.FindClass、NewGlobalRef...等等方法的介绍

3.总结

描述:

1.JavaVm 和 JNIEvn简述

1.1 JavaVm

JavaVM 是虚拟机在 JNI 层的代表,一个进程只有一个 JavaVM,所有的线程共用一个 JavaVM。

1.2 JNIEnv

JNIEnv 表示 Java 调用 native 语言的环境,是一个封装了几乎全部 JNI 方法的指针。

JNIEnv 只在创建它的线程生效,不能跨线程传递,不同线程的 JNIEnv 彼此独立。

native 环境中创建的线程,如果需要访问 JNI,必须要调用 AttachCurrentThread 关联,并使用 DetachCurrentThread 解除链接。

2.FindClass、NewGlobalRef、GetMethodID...等等方法的介绍

2.1 FindClass

jni通过FindClass方法找到java中类,并进行对该类进行操作。

FindClass(const char* name)方法,举例 const char* name = "com/gg/test/类名"

2.2 NewGlobalRef

创建一个全局引用

2.3 GetMethodID

jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)

clazz 是通过FindClass找到java中类,name是方法名,比如构造方法“init”,

sig方法的定义:

例子:

java构造方法:evn->GetMethodID(clz,"init","()V");

Java类型

符号

Boolean -> Z

Byte -> B

Char -> C

Short -> S

Integer -> I

Long -> L

Float -> F

Double -> D

Void -> V

Object对象 -> L开头,包名/类名,”;”结尾,$标识嵌套类

String -> Ljava/lang/String;

public void upDataStatus(String var0) -> sig (Ljava/lang/String;)V

public static String getBuildVersion() -> sig ()Ljava/lang/String;

......

3.总结

具体介绍查看官方教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值