(小技巧) 如何加快 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");
哈哈,大家都懂了噻,在用户回忆密码和帐号的时候,别的窗体已经创建完了.