Delphi Android服务添加FMX.Types声明及使用TTimer时崩溃问题咨询
Delphi Android服务相关问题解答
1. 为什么Android服务中不能添加FMX.Types声明?
FMX.Types是FireMonkey跨平台UI框架的核心基础单元,该单元的初始化段代码会自动尝试加载FMX UI运行时环境,依赖安卓端的Activity UI上下文、UI线程消息循环两个必须的运行资源。
安卓服务属于无UI组件,运行时没有关联任何Activity实例,也不会初始化FMX所需的UI消息循环。只要服务单元的uses列表引入了FMX.Types,不管你有没有实际使用该单元内的组件,单元初始化逻辑都会自动执行,最终因为找不到依赖的UI资源触发异常,导致进程崩溃。
2. Android服务中是否无法使用TTimer组件?
并非完全不能使用定时能力,仅不能使用FMX框架下的TTimer组件:FMX封装的TTimer依赖FMX UI消息循环派发定时事件,服务中没有对应运行环境,直接使用会触发和引入FMX.Types一致的崩溃问题。
你可以选择以下不依赖FMX的定时实现方案:
- 创建独立
TThread工作线程,配合Sleep方法实现定时触发逻辑 - 调用安卓原生API实现系统级定时:比如使用
Handler.postDelayed或者AlarmManager - 使用Delphi跨平台运行时的非UI定时能力:比如
System.Threading.TTask配合TTimeSpan实现异步定时任务
内容的提问来源于stack exchange,提问作者Pedro Luque
相关产品推荐
相关产品推荐

