【Delphi】 使用RAD Delphi FMX 开发安卓APP经常很不稳定且闪退的原因

不稳定和闪退优先排查变量的创建和释放,访问等相关代码,这里只是说明一下在传统VCL转到FMX后经常碰到问题时的大概率原因。

在VCL开发中经常使用destroy来释放创建的类示例(Create和Destroy或Free一一对应),

而Delphi FMX在开发Android APP时,经常出现APP崩溃闪退也有很大可能性是因Destroy导致的。

因为在FMX,全局变量和类变量采用引用计数来释放,而计数的增加很多时候是隐藏在代码背后自动添加的,属于FMX框架运行时所需的计数量。

而在开发中在需要调用DisposeOf来减少次数即可。

若直接调用Destroy,则会导致类示例的Destroy方法被执行,也就相当于“内容”被擦除了,但引用计数仍在,所以在FMX框架内部在引用计数为0时的自动释放中,会再次擦除不存在的“内容”,相当于访问不存在的非法内存,就会导致崩溃,且调试中无法定义代码位置,若没有该经验,最终觉得毫无头绪。。。

就像上面说的,全局变量或类变量会有引用计数的影响,而且需要注意的是,匿名函数在编译时也会被当作匿名类处理,其局部变量也会转换为类变量。

当我们编译匿名函数时,若有未使用变量的警告,提示内容一般是:

[DCC Hint] Unit1.pas(56): H2164 Variable 'aSSS' is declared but never used in '(null).[0]'

这里的 (null).[0] 就是编译器自动创建的匿名函数类名称。

猜你喜欢

转载自www.cnblogs.com/caibirdy1985/p/9470236.html