(小技巧) 如何加快 C++ Builder Android程序的启动速度,减少启动黑屏时间

小要饭 2015-03-12 11:23:37
FMX的应用想启动时完全不黑屏是做不到的.网上很多基于delphi XE5增加启动画面的做法我也尝试了,与其说是防止黑屏,倒不如说是自定义全屏开机画面.实际上,这一点在XE7里面,人家已经允许你自定义启动画面了.
黑屏的根本原因,其实是在创建窗体:
extern "C" int FMXmain()
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TDataModule1), &DataModule1);
Application->CreateForm(__classid(TFormMain), &FormMain);
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2);
Application->CreateForm(__classid(TForm3), &Form3);
Application->CreateForm(__classid(TForm4), &Form4);
Application->CreateForm(__classid(TForm5), &Form5);
Application->CreateForm(__classid(TForm6), &Form6);
Application->Run();
}
...
}
在Application->Initialize();执行的时候,开机画面其实就关闭了.你启动时创建的窗体越多,窗体上控件越多,黑屏时间就越长.至少在我的P770手机上,上面这代码至少要黑我2到3秒钟.与有没有开机画面毛关系都没有.
如何改善就要看你的应用里面涉及的窗体功能是如何分布的了.我这个程序里DataModule1和FormMain是必须要创建的.于是我把这连个留下来.
Source文件这样改:
...
Application->Initialize();
Application->CreateForm(__classid(TDataModule1), &DataModule1);
Application->CreateForm(__classid(TFormMain), &FormMain);
Application->Run();
...
DataModule1 h文件里加上:
...
包含上需要创建的窗体的头文件
...
private: // User declarations
...
//----------------------------------------------窗体是否被创建
bool A_create_form_1;
bool A_create_form_2;
bool A_create_form_3;
bool A_create_form_4
bool A_create_form_5;
bool A_create_form_6;
...

public: // User declarations
...
void __fastcall CreateForm(AnsiString formname); //创非主窗体但是不显示
...
DataModule1 cpp文件里加上:
void __fastcall TDataModule1::CreateForm(AnsiString formname)
{//创非主窗体但是不显示
if(formname == "form1"){
if(A_create_form_1){return;}
else{
Form1= new TForm1(Application);
A_create_form_1= true;
return;
}
}
...别的窗体创建代码都差不多,不罗嗦了.就是if来if去.
}

然后,我在主窗体登录按钮下这样写:
DataModule1->CreateForm("form1");//form1是登录窗
Form1->Show();//显示登录窗体
Application->ProcessMessages();
DataModule1->CreateForm("form2");
DataModule1->CreateForm("form3");
DataModule1->CreateForm("form4");
DataModule1->CreateForm("form5");

哈哈,大家都懂了噻,在用户回忆密码和帐号的时候,别的窗体已经创建完了.
...全文
193 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
draculamx 2015-03-13
  • 打赏
  • 举报
回复
经验值!!! mark之~~~~
宝龙哥 2015-03-12
  • 打赏
  • 举报
回复
不错,启动时只构建数据模块和主窗体就可以了
小要饭 2015-03-12
  • 打赏
  • 举报
回复
补充一下: 1 如果窗体中包含了数据感应控件,你最好在数据源获得数据前把这个窗体创建好.否则会看不到数据的. 2 想delete一个窗体,似乎在android下是没用的,这个窗体最多被Hide,Android中没有触发FormDestroy.
星際訪客 2015-03-12
  • 打赏
  • 举报
回复
我來說真話好了! 是先有雞還是先有蛋呢? 當然是先有 Delphi 後因應市場的需求又基於 VCL 推出 C++Builder...因 VCL 基礎 Lib 為 Delphi 所建構...所以除了具備 C++ 底子最好...還需要洞悉一下 Delphi 與 C++ 之間的橋接方式...使用目前 XE 系列後續移動開發版本...當然也需要了解一下 Firemonkey...若要搞移動開發進階一點之核心內幕...必要時原生開發 Android 或 iOS 的路子可能也得按部就班走一回...... 其實我對硬湊合出來的玩意兒很不以為然......
小要饭 2015-03-12
  • 打赏
  • 举报
回复
还有一种是折腾死人,先写java,再拿java调用fmx,再打包到项目,再... ... 要那样不如直接用java 或者 b4a 算了.这种算是fmx的硬伤,要解决不需要我们去折腾,是embarcadero的事情了.

551

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧