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&#