如何在应用程序/活动被杀死时避免系统查杀服务

时间:2014-04-13 13:05:15

标签: android service android-activity system kill-process

我的应用只有一个activity和一个service。如果我在activity运行时杀了service它也会被杀死。对我来说这项服务并没有被杀死是非常重要的。如何在系统杀死时(或者我通过清除"最近的应用程序"列表来杀死它)activity service仍然保持活动状态直到它完成工作?提前谢谢!

3 个答案:

答案 0 :(得分:2)

您可以尝试从服务中的START_STICKY返回onStartCommand

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    handleCommand(intent);
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

答案 1 :(得分:1)

  

对我而言,服务并没有被杀死非常重要

您的进程可以根据用户活动(最近的任务列表,第三方任务管理器,"强制停止"在设置中等)或基于任何原因随时被杀死操作系统需求(系统RAM越来越低)。你不能阻止这种情况。

您可以采取一些措施来最小化操作系统自行决定终止您的流程的几率,例如在服务上使用startForeground(),但这会阻止用户执行用户想要的操作应用程序。

  

我正在显示该服务的窗口,因此如果服务停止,则窗口消失。

据推测,如果用户通过最近的任务列表,任务管理器等明确删除了您的应用程序,用户希望您的窗口消失。我们当然欢迎您提供建议。记录这将产生的任何负面影响。

我们也欢迎您尝试将该服务置于单独的流程中。我的理解是,这对Android 4.4的最新任务列表没有帮助,尽管它可能在早期版本的Android上。这对第三方任务管理器是否有帮助可能取决于经理,这对于## Force Force"从设置。这也意味着您必须处理IPC,在主服务器和服务进程都运行时增加系统RAM消耗等。

答案 2 :(得分:0)

您是否正在运行绑定服务?如果是这样,那么当最后一个客户端活动断开连接(终止)时,系统将终止它。这是reference page

中的模糊
  

当最后一个客户端从服务解除绑定时,系统会破坏该服务   service(除非服务也是由startService()启动的)。