onTaskRemoved在onCreate之后在从最近的应用列表中向外滑出时启动了服务

时间:2015-08-26 10:32:24

标签: android android-service kill-process

我从一个Activity启动了一项服务,该服务正常运行onCreateonStartCommand正常调用。在设置中 - >运行应用程序显示1 process and 1 service 现在,当我从应用程序最近列表中刷出我的应用程序时。服务重新创建,在设置 - >运行应用中,它会显示0 process and 1 service restarting...并且onCreateonStartCommandonTaskRemoved被调用。

现在问题出在一个应用onTaskRemoved之后立即调出应用,然后调用onCreate被调用,而在其他应用onTaskRemoved需要时间并在onCreate之后调用。

为什么会出现这种不同的行为?任何建议都会对我有所帮助。请提供您的意见和建议。

08-26 15:43:48.611: D/PassiveService(15359): PASS_IVE, onCreate...
08-26 15:43:48.611: I/PassiveService(15359): PASS_IVE, registerReceivers...

轻扫后

08-26 15:44:05.789: D/PassiveService(15499): PASS_IVE, onCreate...
08-26 15:44:05.809: I/PassiveService(15499): PASS_IVE, registerReceivers...
08-26 15:44:05.839: I/PassiveService(15499): PASS_IVE, onTaskRemoved...

1 个答案:

答案 0 :(得分:2)

调用正在运行的服务的 onTaskRemoved (当应用程序从最近的应用程序中删除时)通常会延迟如果我们正在执行任何沉重的UI相关内容或向服务中的接收者广播消息< /强>

例如,假设您正在从Web服务器下载大小为50MB的文件,因此每次读取1024字节的流数据作为缓冲区时,从Web服务器下载,并且您正在写入设备中的文件的数据

与此同时,您正在更新UI线程的进度,这意味着您要更新到UI线程的每个KB,这将导致应用程序冻结。

因此,如果您从最近的应用列表中刷出,系统将尝试停止服务,但由于该服务与UI线程保持联系,系统将无法停止该服务,它将创建新服务,尽管旧服务尚未停止。

一旦旧服务完成与UI线程的通信,则会调用onTaskRemoved()并停止旧服务。新服务将在后台运行。