You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firemonkey如何检测Android/iOS系统关机及应用被后台清除事件

Delphi 10.4 FireMonkey 安卓端关机/任务列表划杀应用检测方案

1. 系统关机/重启事件检测

安卓系统触发关机/重启时会发送全局广播,可通过动态注册广播接收器捕获该事件,FireMonkey 原生窗体事件不会响应这类系统级行为,实现步骤如下:

  • 引入必要单元:Androidapi.JNI.GraphicsContentViewText、Androidapi.JNI.Os、Androidapi.Helpers、System.Android.BroadcastReceiver
  • 自定义关机广播接收器
type
  TShutdownReceiver = class(TBroadcastReceiver)
  protected
    procedure OnReceive(Context: JContext; Intent: JIntent); override;
  end;

procedure TShutdownReceiver.OnReceive(Context: JContext; Intent: JIntent);
begin
  if (Intent.getAction.equals(TJIntent.JavaClass.ACTION_SHUTDOWN)) or
     (Intent.getAction.equals(TJIntent.JavaClass.ACTION_REBOOT)) then
  begin
    // 此处写入关机前需要执行的逻辑,如数据保存、资源释放
    // 注意:此处执行时间不能超过10s,否则会被系统强制终止
  end;
end;
  • 应用启动时动态注册接收器,建议在主窗体OnCreate事件中执行:
var
  Filter: JIntentFilter;
  FShutdownReceiver: TShutdownReceiver;
begin
  FShutdownReceiver := TShutdownReceiver.Create(nil);
  Filter := TJIntentFilter.Create;
  Filter.addAction(TJIntent.JavaClass.ACTION_SHUTDOWN);
  Filter.addAction(TJIntent.JavaClass.ACTION_REBOOT);
  TAndroidHelper.Context.registerReceiver(FShutdownReceiver, Filter);
end;

注意:安卓7.0及以上系统禁止静态注册关机广播,仅支持动态注册,无需额外申请权限。


2. 最近任务列表手动划杀应用检测

用户从最近任务列表关闭应用时,安卓会直接销毁应用主进程,常规窗体生命周期事件不会触发,可通过自定义前台服务的onTaskRemoved回调捕获该行为:

  • 首先在工程中添加安卓服务,重写服务的OnTaskRemoved方法:
type
  TAppTaskService = class(TAndroidService)
    procedure AndroidServiceTaskRemoved(Service: TAndroidService; Intent: JIntent);
  end;

procedure TAppTaskService.AndroidServiceTaskRemoved(Service: TAndroidService; Intent: JIntent);
begin
  // 此处写入应用被划杀前需要执行的逻辑
  // 执行完成后调用stopSelf停止服务
  Service.stopSelf(Service.ServiceId);
end;
  • 在应用启动时启动前台服务,安卓8.0及以上需要申请前台服务权限,在 manifest 中添加:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

注意:服务需设置为前台服务,否则后台服务会被系统随机回收,无法保证回调触发;回调中仅可执行轻量操作,不可调用主进程UI相关代码。


通用注意事项

  • 以上两个场景的回调执行时间都被系统严格限制,仅可执行数据持久化、状态保存等轻量操作,耗时操作会被系统强制打断无法执行完成
  • FireMonkey原生的OnCloseQuery、OnClose、OnDestroy事件仅在应用主动调用Close、Terminate方法退出时触发,不响应系统主动销毁进程的场景

内容的提问来源于stack exchange,提问作者LUIS A. GAMA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 18:36:08