我们如何重启服务?

时间:2014-02-28 06:12:05

标签: android service app-launcher

我正在开发具有后台运行服务的android应用程序。

当我从“最近的应用列表”中换出应用时,它将导致应用关闭并停止服务。 (以下方法具有相同的代码。)

    @Override
public void onTaskRemoved(Intent rootIntent)
{
       //code to be executed
       //Stop service
       super.onTaskRemoved(rootIntent);
    }

服务启动代码在Application类(onCreate())中,如果应用程序恢复,它将永远不会被执行。

正面情景

1)如果我在成功执行服务后重新启动应用程序,将会有新的应用实例    创建和服务也将开始。

负面情景

1)因为上面的方法中有一些代码负责停止线程和服务,所以它会导致应用程序花一些时间来停止服务(在交换最近的应用程序之后)。   在此期间,如果我重新启动应用程序,应用程序将重新开始重新创建。 现在,正在运行的服务将停止。

所以,在这种类型的情况下,我有申请但没有后台服务。

我该如何处理这种情况?

1)在服务任务完成之前,不应重新启动应用程序。 2)从启动器活动开始服务。

提前致谢。

3 个答案:

答案 0 :(得分:0)

在Service类的onStartCommand()中,你必须将return设置为“START_STICKY”,以确保由android平台终止的重启服务(如果应用程序中断)。

答案 1 :(得分:0)

您可以使用Intent

检查OnResume中服务的状态并从那里重新启动
  @Override
    protected void onResume() 
    {
        /*   This will be called when starting the UI and resume from background
         *   If the service is not running, then start the service and bind to the service. 
         *   If the service is already running, then just bind with the service. The status
         *   of the service is determined by the #DetermineServiceStatus function.
         */


      }

答案 2 :(得分:0)

几乎无法控制服务的生命周期。只要系统需要更多资源,后台服务就容易被Android杀死。

设计后台服务的最佳方法是从START_STICKY(您已经做过)返回onStartCommand(),以确保在有足够资源可用时,您的服务会自动重新启动,并且工作您应该在后台服务中执行,以便即使它被中断,它也应该在Android OS重新启动时成功继续其任务。