Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3149975
  • 博文数量: 117
  • 博客积分: 10003
  • 博客等级: 上将
  • 技术积分: 5405
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-23 09:34
文章分类

全部博文(117)

文章存档

2011年(1)

2010年(10)

2009年(69)

2008年(37)

分类: LINUX

2009-03-28 10:53:18

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

主要干的事是:

  • Link to the most common libraries
  • Construct QPEApplication
  • Pre-load the default font and initialize other data where possible.
  • Execute the event loop and wait for a request to run an application.

singleexec机制:

     singleexec机制是将所有应用都静态链接成一个可执行文件qpe。 每个应用可执行文件都是指向qpe的链接文件。原理与busybox类似。

     好处: 省去了动态库链接,加快启动。 缺点: 全部链接成一个进程空间, 容易名称冲突,不利于第三方集成。

   此外,从理论上来说,singleexec并不更耗内存。因为可执行文件虽然变大了,但是程序启动只是分配了虚拟内存,物理内存并未分配。

  个人建议用prelink足够了,singleexec不一定需要用。

阅读(1450) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~