火山Py类库
本帖最后由 华天微读 于 2019-12-31 21:10 编辑我也不知道咋想的,突然就想搞一个火山安卓平台上可用的Py解释器(实际上是android上运行,只是封装成火山类库),后来,我仔细想了一下,发现折腾这个确实是可行的....(好处, 省略掉千言万语),就咱们普通用户来说, 好处体现在两点.
1. Py类库相当多, 火山跑Py, 就相当于, 火山可以使用大部分的Py开源库(注意, 是开源库).
2..... 忘词了。自行体会吧.
首先, 先认识一下我为大家准备的几个方法,以及其作用(应用于Py代码中的方法)1
然后,再认识一下火山中的方法.
1.线程方法
通过以上的代码组合,即可完成火山与Py的相互通信.相互调用.
例如,我通过把一个窗口对象设置进py中,那么,我就可以在py中,通过这个对象,调用窗口类的任意方法,比如 关闭,以及**出信息框
其中,画红框的意思是, 当我执行这一段代码的时候,会调用火山中的"msgbox"方法,也就是"**出提示框"方法, 这个"msgbox"只是给他设置的一个输出名.
第二段的意思是,直接通过当前的对象,调用窗口类的方法"finish"也就是"关闭",直接关闭当前这个窗口.
这些方法可执行的前提,是你需要提前把窗口对象设置进去.
问:如果我想要执行的py代码很耗时怎么办?会不会阻塞app的ui线程(卡主APP的界面)?
答:会的,如果需要在py中执行较为耗时的代码的话,那么你就需要使用"进入子线程"与"退出子线程"了,将所欲执行的py代码,都放到这两个方法中间,这样,在执行时,就不会阻塞app的ui线程了,如下图.
这是我在测试时,对某站进行一个小说的数据的读取(非爬虫,爬虫违法,请各位知悉), 因为HTTP访问,比较耗时,所以我将代码都放到了子线程中去执行,有细心的朋友可能会看到, 里面怎么有个"callThreadMethod"? 这是什么鬼?他就是接下来要介绍的方法了.
在子线程中,如果想要访问另外一个线程(子线程访问主线程),在火山里没有要求那么严格,大家平时可能也没有注意, 但是在NDK编程中,这就需要注意了,
因为,一旦涉及到跨线程,稍不注意,就崩溃,崩溃到人崩溃!额 跑题了,回到正题, 之所以在子线程中,要用"callThreadMethod"就是因为NDK跨线程的问题崩溃的问题,使用这个方法,即可避免崩溃,这个方法呢,也不是调用指定的方法,而是,调用火山py类中的"火山Py类_线程方法被触发"这个事件,用户可以添加这个事件,当执行"callThreadMethod"后,就会触发这个事件了,"callThreadMethod"所提供的参数,都被添加到了一个对象数组中,也就是这个
如果要取出数据,那只需要取数组中取出成员,并且强转为响应的数据类型即可.
例如, 如上上图,我在执行"callThreadMethod"方法时,给了四个参数,都是文本型的数据,那么,我就可以这样取出来.
好了,基本上介绍的差不多了,我会在下面附上使用示例,大家配合本文稍微看看就能明白.
注意事项
差点忘记了,关于Py与火山方法相互调用时,能传递的数据类型得说明一下.
不论是返回类型,还是参数类型,目前只支持 长整数(Py中为int), 小数(Py中为Float), 文本型, 逻辑型.所以,想要两种语言相互调用,只能用这四种数据类型, 对象类以及其他的set,tuple等等,我会在闲暇时逐渐完善.
例程文件(目前我只提供了arm64-v8a的库,也就是说, 不支持在模拟器上运行,不支持5.1一下的安卓设备):
链接:https://share.weiyun.com/5svbvgM 密码:qghrak
万分感谢,大佬牛逼,爱你
页:
[1]