FMX(Android)平台下Ticks64()函数返回值为0的问题咨询
在Android Firemonkey中调用
Ticks64()返回0的问题解决思路 我之前在Delphi的Firemonkey Android项目里也碰到过Ticks64()(来自IdGlobal.pas)始终返回0的情况,当时折腾了好一阵才找到根源和解决办法,分享给你:
问题根源
Ticks64()是Indy组件库中用于获取高精度时间戳的函数,但它的实现是平台相关的。在早期版本的Indy中,针对Android平台的适配存在缺陷,没有正确调用Android系统提供的时钟API,导致函数无法获取有效时间戳,直接返回了默认的0值。另外,如果项目的编译配置有问题(比如未正确引入Indy的相关路径,或者API版本适配过低),也可能触发这个问题。
可行的解决办法
- 升级Indy到最新稳定版:较新的Indy版本(比如10.6.2及以上)已经修复了Android平台下的这个适配问题,很多开发者升级后,
Ticks64()就能正常返回时间戳了。 - 替换为FMX原生函数:如果暂时不想升级Indy,可以直接改用Firemonkey自带的
TThread.GetTickCount64()函数。它在Android平台上能正确返回自系统启动以来的64位毫秒数,功能和Ticks64()基本一致,而且是官方适配的,稳定性更有保障。 - 检查编译配置:确认你的Android项目已经正确添加了Indy相关单元的搜索路径,并且编译时的
Android API Level至少设置为21及以上,避免因API版本过低导致底层调用失败。
额外验证小技巧
你可以在调用函数后,把返回值通过Log.d或者FMX的ShowMessage打印出来,或者在调试模式下进入Ticks64()的实现代码,看看底层是否正确调用了Android的SystemClock.elapsedRealtime()这类系统API,这样能更快定位问题所在。
内容的提问来源于stack exchange,提问作者vincent
相关产品推荐
相关产品推荐

