Android native开发设置线程名需要注意的地方

前言

最近在native开发过程为了分析SDK使用线程情况,设置线程名过程中遇到了两个“坑”,故做下简单的总结记录同时跟大家分享一下。
注:这里的native线程,是指用使用pthread创建的线程或直接使用c++的std::thread类来创建新的线程,Andorid/linux上使用prctl(PR_SET_NAME, thread_name, 0, 0, 0)来设置线程名

总结

第一点:设置线程名可能会失效

一般情况下我们native的线程是需要跟java层的模块交互的,由于native线程是没有JVM环境的,所以在在native线程操作java层的代码前,需要attched到JVM于便获取到线程的JVM环境,才能继续调用Java层的接口/代码。通常attched的代码如下

//G_JavaVM在JNI_OnLoad的时候缓存了
G_JavaVM->AttachCurrentThread(&tmpEnv, NULL)
// 第二个JavaVMAttachArgs 参数为NULL,之前设置的线程名会变成Thread-xxx这种名称

如果需要保持之前设置的线程名有效,需要配置JavaVMAttachArgs中的线程名,示例代码如下

//获取之前设置的线程名
char thread_name[128] = {0};
prctl(PR_GET_NAME, (char *)(thread_name));
JavaVMAttachArgs args;
args.version = JNI_VERSION_1_6;
// 赋值到JavaVMAttachArgs的name
args.name = (char *)thread_name;
args.group = NULL;
G_JavaVM->AttachCurrentThread(&tmpEnv,  JavaVMAttachArgs)

第二点:线程名有长度限制

不要设置太长的线程名,线程名的长度是16个字节,包括结束符’\0’,有效的长度是15个字节

资料

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值