本发明专利技术公开了一种JNI层的算法进行多实例调用的封装方法和系统。该方法包括:JAVA层创建用于与JNI层通信的接口类;JNI层创建算法库的对象,并为所述对象赋予指针;根据所述指针创建所述接口类的类对象;将所述类对象返回到JAVA层保存。通过在JAVA层创建接口类,在JNI层创建算法库及算法库中的对象,为对象赋予指针,并将指针反馈到JAVA层对应的接口类;在JAVA层调用该对象时,直接获取该对象在算法库中的对象指针即可。该封装方式很方便地实现了JNI多实例的创建与调用,封装简单实用。
【技术实现步骤摘要】
本专利技术涉及数据调用领域,尤其涉及一种JNI层的算法进行多实例调用的封装方法和系统。
技术介绍
Android系统有时候需要提升执行速度及效率,有些核心的算法,或者在JAVA层执行比较耗时的地方,一般会通过C或者C++来实现部分核心的算法,然后把结果提供给JAVA层,比如对图片进行某些效果处理,在效果处理方面如果能用C++来实现效率和速度都会更快,这样就不可避免地会使用到JNI调用。在某些场合下可能同时调用JNI的某个算法,这种场景比较多,比如采用JNI实现人脸识别的算法,在图片快速滑动过种中需要进行人脸检测,如果此时检测到人脸的同时此时又去进行人脸编辑(比如美妆)等效果的处理(因为也需要对人脸进行检测),此时就会碰到,如果JNI的算法对象只有单实例时,就会出现只有等第一次人脸检测算法的实例跑完并且销毁该对象时才能进行下一次的人脸识别的算法调用,这样局限性大大提高了。
技术实现思路
本专利技术提出了一种JNI层的算法进行多实例调用的封装方法和系统,其通过在JAVA层创建接口类,在JNI层创建算法库及算法库中的对象,为对象赋予指针,并将指针反馈到JAVA层对应的接口类;在JAVA层调用该对象时,直接获取该对象在算法库中的对象指针即可。该封装方式很方便地实现了JNI多实例的创建与调用,封装简单实用。为实现上述设计,本专利技术采用以下技术方案:一方面采用一种JNI层的算法进行多实例调用的封装方法,包括:JAVA层创建用于与JNI层通信的接口类;JNI层创建算法库的对象,并为所述对象赋予指针;根据所述指针创建所述接口类的类对象;将所述类对象返回到JAVA层保存。其中,所述接口类中包括一个带参数的构造函数;所述根据所述指针创建所述接口类的类对象,包括:通过JNI环境查找到JAVA层中的接口类,获取所述接口类的构造函数;获取所述对象的指针,将所述指针传到所述构造函数的参数创建一个接口类的类对象。其中,还包括:JAVA层调用所述算法库的对象时,基于所述指针通过JNI环境调用算法库中的对象。其中,所述构造函数的参数的类型为INT型参数。其中,所述JAVA层的初始化方法为静态方法。另一方面采用一种JNI层的算法进行多实例调用的封装系统,包括:接口类创建单元,用于JAVA层创建用于与JNI层通信的接口类;算法库创建单元,用于JNI层创建算法库的对象,并为所述对象赋予指针;类对象创建单元,用于根据所述指针创建所述接口类的类对象;保存封装单元,用于将所述将所述类对象返回到JAVA层保存。其中,所述接口类中包括一个带参数的构造函数;所述类对象创建单元,包括:接口通信模块,用于通过JNI环境查找到JAVA层中的接口类,获取所述接口类的构造函数;类对象创建模块,用于获取所述对象的指针,将所述指针传到所述构造函数的参数创建一个接口类的类对象。其中,还包括:算法调用单元,用于JAVA层调用所述算法库的对象时,基于所述指针通过JNI环境调用算法库中的对象。其中,所述构造函数的参数的类型为INT型参数。其中,所述JAVA层的初始化方法为静态方法。本专利技术的有益效果在于:通过在JAVA层创建接口类,在JNI层创建算法库及算法库中的对象,为对象赋予指针,并将指针反馈到JAVA层对应的接口类;在JAVA层调用该对象时,直接获取该对象在算法库中的对象指针即可。该封装方式很方便地实现了JNI多实例的创建与调用,封装简单实用。附图说明为了更清楚地说明本专利技术实施例中的技术方案,下面将对本专利技术实施例描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据本专利技术实施例的内容和这些附图获得其他的附图。图1是本专利技术实施例提供的一种JNI层的算法进行多实例调用的封装方法的第一实施例的方法流程图。图2是本专利技术实施例提供的一种JNI层的算法进行多实例调用的封装方法的第二实施例的方法流程图。图3是本专利技术实施例提供的一种JNI层的算法进行多实例调用的封装系统的第一实施例的结构方框图。图4是本专利技术实施例提供的一种JNI层的算法进行多实例调用的封装系统的第二实施例的结构方框图。具体实施方式为使本专利技术解决的技术问题、采用的技术方案和达到的技术效果更加清楚,下面将结合附图对本专利技术实施例的技术方案作进一步的详细描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。请参考图1,其是本专利技术实施例提供的一种JNI层的算法进行多实例调用的封装方法的第一实施例的方法流程图,本方案中的封装方法主要用于计算机程序中的跨语言调用,以实现降低对不同语言的优势利用,提高程序运行的速度和效率。如图所示,该JNI层的算法进行多实例调用的封装方法,包括:步骤S101:JAVA层创建用于与JNI层通信的接口类。接口类与对象通过JNI环境实现跨语言的通信。步骤S102:JNI层创建算法库的对象,并为所述对象赋予指针。在JNI层创建一个核心算法的对象,例如人脸识别及相关效果处理的算法库,在算法库中的对象会赋予指针以作为JAVA的调用的索引。步骤S103:根据所述指针创建所述接口类的类对象。通过JNI环境查找到JAVA层中的接口类,确认该对象即为接口类的目标对象,获取该对象的指针,以备将该指针返回到JAVA层中保存。步骤S104:将所述类对象返回到JAVA层保存。JAVA层在接收到该指针之后,将指针与接口类对应保存,在需要调用该对象时,直接通过指针调用即可。综上所述,通过在JAVA层创建接口类,在JNI层创建算法库及算法库中的对象,为对象赋予指针,并将指针反馈到JAVA层对应的接口类;在JAVA层调用该对象时,直接获取该对象在算法库中的对象指针即可。该封装方式很方便地实现了JNI多实例的创建与调用,封装简单实用。请参考图2,其是本专利技术实施例提供的一种JNI层的算法进行多实例调用的封装方法的第二实施例的方法流程图。如图所示,该JNI层的算法进行多实例调用的封装方法,包括:步骤S201:JAVA层创建用于与JNI层通信的接口类。所述接口类中包括一个带参数的构造函数。所述接口类中包括一个带参数的构造函数;所述构本文档来自技高网...
【技术保护点】
一种JNI层的算法进行多实例调用的封装方法,其特征在于,包括:JAVA层创建用于与JNI层通信的接口类;JNI层创建算法库的对象,并为所述对象赋予指针;根据所述指针创建所述接口类的类对象;将所述类对象返回到JAVA层保存。
【技术特征摘要】
1.一种JNI层的算法进行多实例调用的封装方法,其特征在于,包括:
JAVA层创建用于与JNI层通信的接口类;
JNI层创建算法库的对象,并为所述对象赋予指针;
根据所述指针创建所述接口类的类对象;
将所述类对象返回到JAVA层保存。
2.根据权利要求1所述的一种JNI层的算法进行多实例调用的封装方法,其
特征在于,所述接口类中包括一个带参数的构造函数;;
根据所述指针创建所述接口类的类对象,包括:
通过JNI环境查找到JAVA层中的接口类,获取所述接口类的构造函数;
获取所述对象的指针,将所述指针传到所述构造函数的参数创建一个接口
类的类对象。
3.根据权利要求1所述的一种JNI层的算法进行多实例调用的封装方法,其
特征在于,还包括:
JAVA层调用所述算法库的对象时,基于所述指针通过JNI环境调用算法库
中的对象。
4.根据权利要求2所述的一种JNI层的算法进行多实例调用的封装方法,其
特征在于,所述构造函数的参数的类型为INT型参数。
5.根据权利要求1所述的一种JNI层的算法进行多实例调用的封装方法,其
特征在于,所述JAVA层的初始化方法为静态方法。
6.一种JNI层的算法进行多实例调用的封装系统,其特征在于,包括:...
【专利技术属性】
技术研发人员:李小朋,
申请(专利权)人:广东欧珀移动通信有限公司,
类型:发明
国别省市:广东;44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。