关于START_STICKY在服务中

时间:2015-10-06 05:48:51

标签: android android-intent android-service

关于在Android服务中使用START_STICKY

官方文件说:

  

如果此服务的进程在启动时被终止(之后)   从onStartCommand(Intent,int,int)返回,然后将其留在   开始状态,但不保留这个意图。后来的系统   将尝试重新创建服务。因为它处于启动状态,   它将保证在之后调用onStartCommand(Intent,int,int)   创建新的服务实例;

这是可以理解的,因此当启动服务的进程由于内存不足而被终止时,操作系统将自动尝试稍后再次启动该服务。

我的问题是,如果我的代码启动服务startService(...),然后停止它(例如我在我的应用程序用户界面上有一个" STOP"按钮,按下它时,我打电话给stopService(...)),系统稍后会再次启动服务吗?或者,服务实例是否会完全从内存中清除,而不会在以后由系统创建? (此方案没有服务绑定)

4 个答案:

答案 0 :(得分:1)

START_STICKY-告诉系统在有足够的内存可用时,从低内存中恢复后,创建该服务的新副本。在这里,您将丢失之前可能计算过的结果。

对于您的查询的答案是,只有在使用START_STICKY时在任何情况下被操作系统杀死的服务才会重新创建。如果我们终止服务,为什么android需要再次重现它。如果你使用stopSelf()服务不会重新创建,即使它是粘性的。

答案 1 :(得分:0)

我在测试期间在我的应用中有stopService()按钮。一旦您使用该命令停止它,它将不会再次启动,直到您致电startService()

答案 2 :(得分:0)

Android不时杀死这个过程。然而,Android系统会自动重建Sticky服务。有人说,Sticky服务被破坏,并在5秒后重新创建。

答案 3 :(得分:0)

START_STICKY是已启动服务的操作模式,具体取决于它们从StartCommand()方法返回的值.START_STICKY用于创建服务副本的服务,但它不会存储执行的任何服务结果之前。

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Logs.d(TAG, "# Service - onStartCommand() starts here");

// If service returns START_STICKY, android restarts service automatically after forced close.
// At this time, onStartCommand() method in service must handle null intent.
return Service.START_STICKY;

}