Chaquopy:Android studio中编写Python代码-4

本文是Chaquopy教程系列的第四部分,讲述了在Android应用中使用Chaquopy时,首次调用Python处理时间较长的问题及解决方案。作者发现`Python.getInstance()`是导致延迟的原因,并建议在APP启动时预加载Python环境来改善用户体验。

Chaquopy 教程

**写在开头,license请自己申请,使用别人的会被检测使其失效。 **
Chaquopy重大更新:最新版本无需license!!!

Chaquopy

官方链接:https://chaquo.com/chaquopy/

Chaquopy的作用:使用Chaquopy在Android Studio添加Python环境,java和Python互调

目前调试后APP可以正常运行(2020年12月18日)

前两篇文章(教程1教程2教程3)已经介绍了在Android studio使用chaquopy的步骤,接下来介绍我开发过程中遇到的一个小问题,虽然不致命,但是不解决的话就很烦。

第一次调用Python处理时间较长

在实际自己开发过程中发现一个问题,第一次调用Python处理的时间有点长,但是之后就感觉变快了。通过检查代码,发现是创建Python接口的时间影响的。

首先可以给大家看看我这部分的代码:

先是导入相关库:

import com.chaquo.python.Kwarg;
import com.chaquo.python.PyObject;
import com.chaquo.python.android.AndroidPlatform;
import com.chaquo.python.Python;

然后是在onCreate函数里面先使用以下代码进行初始化:

initPython();

initPython函数内容为:

// 初始化Python环境
    void initPython(){
        if (! Python.isStarted()) {
            Python.start(new AndroidPlatform(this));
        }
    }

之后在需要使用Python代码处理数据时主要内容为:

Python py = Python.getInstance();
PyObject obj1 = py.getModule("function").callAttr("wav2picture",new Kwarg("wav_path", path),new Kwarg("pic_path", pic_path));

主要影响时间的,就是上面的第一行“Python py = Python.getInstance()”,个人理解!!!因为第一次使用,就需要第一次去获取一个instance,而之后每次还需要执行这段代码时,就可以使用上次获取的实例继续使用,从而只有第一次时间会受到影响。当然,这样分析,是因为我后续只修改了这里就解决了问题而得出的结论。


那么怎么去解决这个问题呢?因为这段代码是一定要执行的,所以我们可以将这段代码执行的时机改变一下就行,我的解决方案是在加载APP时,执行这段代码,因为这样就把这段时间移到了打开APP这个阶段,而打开APP这个阶段时间长一点,一般都不会有什么影响。


具体修改方法如下图所示:

首先定义两个私有变量:

private Python py;
private PyObject obj;

然后是在onCreate函数中的初始化代码后面加上以下几行:

initPython();
this.py = Python.getInstance();
this.obj = py.getModule("function")
  • 这里getModule的用法请参考前面的教程

那么在我需要调用Python处理数据处的代码内容如下:

this.obj.callAttr("wav2picture",new Kwarg("wav_path", path),new Kwarg("pic_path", pic_path));

这样就解决了第一次调用Python处理数据时间过长的问题了!


还有什么问题大家可以在讨论区进行交流!
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值