分类:
2008-08-01 11:39:21
转载:
http://blog.csdn.net/yagbuchen/archive/2007/08/17/1749156.aspx
quicklauncher机制:
采用quicklauncher可以加快qtopia应用的启动速度。 具体方法是事先启动一个quicklauncher进程,把一些
初始化工作做好,等需要启动应用时,直接开始进入应用主窗口运行。
1) quicklauncher进程如何启动的?
两个场合会启动: 系统初始化启动时; quicklauncher进入应用主窗口后,就变身为具体的应用了,此时需要再启动一个新的quicklauncher进程以备下次使用。
系统初始化时启动quicklauncher:
qtopia的启动总是从 ../bin/qpe 开始执行。 刚开始会执行 initApplication. initApplication具体内容如下:
initEnvironment ;
qcop clean up;
ServerApplication a( argc, argv, QApplication::GuiServer ); //ServerApplication 是QPEApplication的一个子类。
AlarmServer::initialize();
new PhoneServer;
new Server() {
new PhoneLauncher / CoverPhone ;
new DocumentList;
new AppLauncher; 构造函数里会构造一QProcess, 来exec bin/quicklauncher , 来启动quicklauncher进程.
启一个定时器,x秒后构造一QProcess, 来exec bin/qss , 来启动qsoundserver进程.
startTransferServer/ 电源管理、 电池管理初始化。
}
此外, AppLauncher 在发送execute的qcop消息通知quicklauncher进程变身为应用后,会启动一个定时器,再启动一个quicklauncher进程。
2) quicklauncher进程注意干些啥?
代码可以参见: singleexec模式的参考 server/main.cpp等 , 非singleexec模式参考tools/quicklauncher.cpp
主要干的事是:
singleexec机制:
singleexec机制是将所有应用都静态链接成一个可执行文件qpe。 每个应用可执行文件都是指向qpe的链接文件。原理与busybox类似。
好处: 省去了动态库链接,加快启动。 缺点: 全部链接成一个进程空间, 容易名称冲突,不利于第三方集成。
此外,从理论上来说,singleexec并不更耗内存。因为可执行文件虽然变大了,但是程序启动只是分配了虚拟内存,物理内存并未分配。
个人建议用prelink足够了,singleexec不一定需要用。