如何使IntentService在应用关闭后继续运行?

22

在我的Android应用中,我通过调用IntentService来自Activity启动。

startService(new Intent(this, MyService.class));

而且它的工作效果非常好。我可以在活动之间移动,按Home按钮切换到其他应用程序......它仍然在工作。但是如果我从最近使用屏幕中删除我的应用程序,则我的服务将停止。我该如何避免这种情况?换句话说,即使我的应用程序从最近使用的应用程序中关闭,我该如何让我的服务保持运行状态?

我的服务代码如下:

public class MyService extends IntentService {

public MyService() {
    super("MyService");
}

@Override
protected void onHandleIntent(Intent intent) {
    //Here I run a loop which takes some time to finish
}

}

IntentService并不是一直在运行,而是基于Intent工作。你可以使用Intent发送一个命令(比如执行某项任务),服务会执行该任务,然后停止自身。 - Stan
与服务相关的内容 https://dev59.com/32Qn5IYBdhLWcg3wrouL - Ciro Santilli OurBigBook.com
与https://dev59.com/NmIk5IYBdhLWcg3wIq9U相关的内容。 - Ciro Santilli OurBigBook.com
2个回答

12

IntentService并不是一直在运行,而是基于Intent的工作方式。您可以使用Intent发送一个命令(例如执行某些任务),服务会执行该任务并在完成后停止自己,等待其他Intent。
如果要实现此目标,应该使用普通的Service,并将其配置为START_STICKY


1
不,我不是指让我的服务一直运行。我的服务需要执行一个长时间运行的操作。我需要做的是,即使我的应用程序从最近关闭了,我的服务仍然继续执行该操作。当它完成时,它应该自行终止。 - fergaral
再次强调:为了实现你的目标,应该使用常规的Service而不是IntentService。 - Stan
我要试一下。谢谢! - fergaral

5

在你的服务类中,重写 @Override onStartCommand 方法。

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

为了停止一个服务本身,您可以使用stopSelf()方法。该方法的详细说明请参考此处

2
这真的安全吗?文档中指出:“您不应该覆盖此方法以用于您的IntentService。相反,应该覆盖onHandleIntent(Intent)方法,系统会在IntentService接收到启动请求时调用该方法。” - Neon Warge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接