Kivy A to Z -- Kivy的运行机制

本文深入探讨了Kivy在Android平台上运行的原理,从PythonActivity的onCreate开始,详细分析了如何通过SDLSurfaceView、线程交互、动态库加载和Python初始化过程,最终执行Kivy代码的过程。
摘要由CSDN通过智能技术生成

 1. 当看到一个在Android平台上运行的Python程序时,我的第一个好奇的地方就是它究竟是怎么做到的。

2. 好,费话少说,我们通过源码来分析一下。

3. 首先从dist/default导入工程,如图所示:

 

 

4. 接下来我们来理顺一下整个的Python程序的引导过程

 

5. PythonActivity的onCreate中:

    mView =new SDLSurfaceView(
            this,
            mPath.getAbsolutePath());
    Hardware.view =mView;
    setContentView(mView); 



6. SDLSurfaceView实现了:SurfaceHolder.Callback,所以接下来SDLSurfaceView.surfaceChanged将被调用

 

7. 来看看surfaceChanged做了什么:

    if (!mRunning) {
        mRunning =true;
        new Thread(this).start();
    }else {
        mChanged =true;
        if (mStarted) {
             nativeExpose();
        }
    } 



从new Thread(this).start()我们知道会创建一个线程,在这个线程里,SDLSurfaceView的run方法将被调用

 

8. 接下来再看看SDLSurfaceView.run

这个函数主要是完成一些OPENGL的初始化工作,然后调用 waitForStart();

waitForStart()在等什么呢?答案是,在等待Python的初始化工作完成。

 

9. PythonActivity的onResume中:

    if (!mLaunchedThread) {
        mLaunchedThread =true;
        new Thread(this).start();
    }
    if (mView !=null) {
        mView.onResume();
    } 


 


该函数的主要作用就是创建了一个线程

另外,当PythonActivyt被创建的时候,mView.onResume什么事也没做。

 

10. 再来看看PythonActivity这个线程的run函数看看做了什么

public void run() {
    unpackData("private", getFilesDir());
    unpackData("public",externalStorage);
    System.loadLibrary("sdl");
    System.loadLibrary("sdl_image");
    System.loadLibrary("sdl_ttf");
    System.loadLibrary("sdl_mixer&#
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值