iOS系统是否会终止Dart Isolate?后台未杀App场景下会触发吗?
问题1:iOS系统是否会在运行一段时间后主动终止Dart Isolate?
不会。iOS系统的资源调度逻辑管控边界仅到应用进程层级,无法感知也不会操作App进程内部由Dart VM创建的Dart Isolate实例,不存在系统主动终止单个Isolate的机制。
正常运行场景下只有两种情况会导致Dart Isolate停止:
- Dart代码逻辑主动触发Isolate退出:比如Isolate内部任务执行完毕、抛出未捕获的异常、上层代码主动调用
Isolate.kill()方法 - iOS系统直接终止了整个App的进程
问题2:若应用未被终止、仅处于后台运行状态时,iOS系统是否会在一段时间后终止对应的Dart Isolate?
不会。只要整个App进程没有被系统销毁,Dart VM的运行状态就会被完整保留,所有存活的Isolate都不会被系统单独终止。
需要注意两个容易和「Isolate被终止」混淆的场景:
- 未配置后台运行权限的App进入后台后,通常会在数秒到数分钟内被系统挂起,此时整个Dart VM的执行都会被冻结,所有Isolate都会暂停代码执行,但这不是被终止,只是暂停运行,App回到前台后Isolate会自动恢复执行
- 若App已经配置了合法的后台运行权限(比如后台音频播放、持续位置追踪、后台下载等),在后台可以正常持续运行时,Dart Isolate也会和前台运行状态一样正常执行,不会出现异常停止的情况
内容的提问来源于stack exchange,提问作者Max Tromp
相关产品推荐
相关产品推荐

