java 调用 v8_java – 使用v8 :: Locker的正确方法是什么,为什么我必须使用它?

我正在尝试使用NDK在一个

Android应用程序中嵌入v8.

我有一个看起来像这样的JNI模块(JNI映射代码未显示):

#include

#include

#include

using namespace v8;

static jlong getMagicNumber() {

HandleScope handle_scope;

Persistent context = Context::New();

Context::Scope context_scope(context);

Handle source = String::New("40 + 2");

Handle

Handle result = script->Run();

context.Dispose();

return result->NumberValue();

}

我第一次运行getMagicNumber时,它正确运行并返回42.第二次尝试运行它时,它崩溃了.

具体来说,在v8的isolate.h中看到的这个ASSERT失败了:

// Returns the isolate inside which the current thread is running.

INLINE(static Isolate* Current()) {

Isolate* isolate = reinterpret_cast(

Thread::GetExistingThreadLocal(isolate_key_));

ASSERT(isolate != NULL);

return isolate;

}

这听起来很像this problem,它建议使用v8 :: Locker获得“独立访问隔离”.

通过添加一个简单的Locker l;在getMagicNumber的顶部,崩溃不再发生.当我没有注意时,自我修复的问题很容易打破.

我只有最简单的理解为什么这可以解决我的问题,而且我正在收到编译器警告,我正在以不赞成使用的方式使用v8 :: Locker.推荐的方法是为它提供一个v8 :: Isolate作为v8 :: Locker构造函数的参数,但我不知道我应该如何“获取”一个隔离.

最终:根据v8的当前状态解决这个问题的正确方法是什么?为什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值