UI与线程
本文为我项目中遇到的一个问题实际记录。
1、问题描述
这个项目是多方合作的项目,有些源代码是非公开的,通过库(so)的方式调用的,我的一个UI有很多加载图片的地方。
这些加载的图片是以相对路径的方式来加载的,理论上来说会比较安全,但在画UI的过程中,之前的图片都能顺利的画出来。
但进度条(这个UI是一个下载的页面)走到一半时却图片加载不成功,只有进度条的百分比在显示。并且每次(运行多次)
情况都不一样。
2、问题分析
百思不得其解,仔细想想是不是图片的路径变了。使得执行的上下文环境改变了,做试验,将UI中部分图片的路径改为绝对路径,
而其他的图片保留相对路径,执行程序,发现改为绝对路径的图片能正确显示,而保留相对路径的图片却还是不能显示,是哪里改
变的执行上下文呢?如是通过最土的方式,在所有调用函数的前后调用system("pwd"),通过打印出的信息发现,在调用so库函数
的前后路径改变了。通过询问第三方库制作人员发现,so库中使用了chdir函数改变了执行路径。那为什么会图片画不出来呢?
3、原因
在我使用的UI后台是一个线程在执行下载,线程中的函数调用了so库中的函数。而显示进度条中的百分比,是通过检查下载下来
的文件的大小与实际网络传输过来的文件大小(xml中的一个标签来指定),因为so库中的函数在下载时改变了目录,因此在下载页面
刚开始还没有进入调用so库函数时能显示出图片,而在下载过程中调用了so库函数之后,路径改变了,相对路径中的图片就找不到了
因此也就画不出来了。