我从一个包中调用一个jar包。 jar虽然使用了复杂的分层结构和新的抽象/对象/线程定义和实例化,但是很好地打包并向外部暴露了一个非常狭窄的接口。我相信这是一种常见的情况。
我正在从jni代码(在我的一个pthread中)进行单向调用,以便在jar中使用java代码。我所期望的是用jar调用窄接口,然后jar会做所有并返回。
现在我可以成功调用实例方法w /参数传递。但是,如果我调用的方法创建一个新对象,它会无声地失败,如下所示:
Java代码:
public void AAA(){
Log.i(...); <-----------------Successful
new BBB(this); <--------------Don't know what happened
Log.i(...); <-----------------Not successful
}
我把一些打印作为BBB构造函数的第一行,它没有出来。
任何人都可以帮助我吗?感谢。
答案 0 :(得分:0)
原因是BBB内部声明了一个处理程序,但实例化BBB的线程(表示jni pthread)没有准备好Android looper。在进入和退出主题时添加以下代码:
输入:
(* env) - &gt; CallStaticVoidMethod(env,cLooper,mPrepare);
退出:
(* env) - &gt; CallStaticVoidMethod(env,cLooper,mLoop);
当然,您还应该在您的本机代码中的某处准备cLooper,env,方法ID等。