我正在开发具有后台运行服务的android应用程序。
当我从“最近的应用列表”中换出应用时,它将导致应用关闭并停止服务。 (以下方法具有相同的代码。)
@Override
public void onTaskRemoved(Intent rootIntent)
{
//code to be executed
//Stop service
super.onTaskRemoved(rootIntent);
}
服务启动代码在Application类(onCreate())中,如果应用程序恢复,它将永远不会被执行。
1)如果我在成功执行服务后重新启动应用程序,将会有新的应用实例 创建和服务也将开始。
1)因为上面的方法中有一些代码负责停止线程和服务,所以它会导致应用程序花一些时间来停止服务(在交换最近的应用程序之后)。 在此期间,如果我重新启动应用程序,应用程序将重新开始重新创建。 现在,正在运行的服务将停止。
所以,在这种类型的情况下,我有申请但没有后台服务。
我该如何处理这种情况?
1)在服务任务完成之前,不应重新启动应用程序。 2)从启动器活动开始服务。
提前致谢。
答案 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重新启动时成功继续其任务。