半夜写代码之:APP 的 Form 的释放

本文探讨了在Delphi FireMonkey框架中优化界面资源的方法,包括合理使用Form和Frame、动态创建Form实例以及释放Form资源等技巧。

在 Windows 底下,我们通常采用很多个 Form 来把复杂的界面元素,按功能划分,放到不同的 Form 上来显示。需要新的界面时,就来一个 Form2.Show 就可以了。

在 APP 底下,手机的资源比较有限,太多的 Form 会让手机受不了。因此,很多 FireMonkey 的开发建议里面,建议尽量少用 Form,多用 Frame。因为 Form 占用的资源比较多。

但是,在很多界面需要来回切换到情况下,如果是基于 HTML5 浏览器编程来做界面,很简单,就是刷新页面。如果是基于 Delphi FireMonkey 框架来做界面,用 Form 比用 Frame 在很多时候更简单。比如,Form2.Show 就显示了新的界面。Form2.Close 就关闭了这个界面,老的界面就自动显示出来。不需要我们自己去管理界面的层叠关系。如果用 Frame 就需要自己写代码去管理几个 Frame 之间的层叠关系,有点麻烦。

那么,用多了 Form 就带来一个问题:资源不足。

这里有几个小技巧:

1. 在 Delphi 的设计期,New 一个 FireMonkey 的 Form 后,该 Form 会被自动加入到工程文件里面去,在工程文件里面增加一行代码:Form2 := Application.CreateForm(TForm2); 如果你的程序里面有很多的 Form,在程序启动时,光是运行这一大堆的创建 Form 的代码,就会让程序启动时间变得很长,让用户无法忍受。因此,这里必须把工程文件里的一大堆类似代码注释掉,只留下创建主 Form 的代码。


2. 用户点击量某个按钮,需要显示新的界面时,比如需要显示 Form2,动态创建它的实例:

if not Assigned(Form2) then Form2 := TForm2.Create(Application);


3. 在 Form2 里面,通常我们会增加一个返回按钮(如果是安卓 APP,通常是在屏幕的顶部的左上角,有个指向左边的箭头按钮),点下这个按钮就是关闭当前这个 Form2,显示之前的 Form。这里,我们最好在关闭 Form2 的时候,将它释放掉。这样避免APP使用时间长了,创建了一大堆 Form 实例,占用很多资源。要将它释放掉,这里需要做两步:

3.1. 在 Form2.OnClose 事件里面,增加代码:

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := TCloseAction.caFree;
end;

3.2. 在 Form2.OnDestroy 事件里面,增加代码:

procedure TForm2.FormDestroy(Sender: TObject);
begin
  Form2 := nil;
end;


3.3. 上述代码,会导致我们在关闭按钮里面写的 Form2.Close 的时候,Form2 会被自动释放,并且,将 Form2 这个变量设置为 nil,使得下一次需要创建 Form2 的时候才好判断。如果不加上 Form2 := nil; 则下次要使用它时, if Assigned(Form2) 会判断出错。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值