关于在Android服务中使用START_STICKY。
官方文件说:
如果此服务的进程在启动时被终止(之后) 从onStartCommand(Intent,int,int)返回,然后将其留在 开始状态,但不保留这个意图。后来的系统 将尝试重新创建服务。因为它处于启动状态, 它将保证在之后调用onStartCommand(Intent,int,int) 创建新的服务实例;
这是可以理解的,因此当启动服务的进程由于内存不足而被终止时,操作系统将自动尝试稍后再次启动该服务。
我的问题是,如果我的代码启动服务startService(...)
,然后停止它(例如我在我的应用程序用户界面上有一个" STOP"按钮,按下它时,我打电话给stopService(...)
),系统稍后会再次启动服务吗?或者,服务实例是否会完全从内存中清除,而不会在以后由系统创建? (此方案没有服务绑定)
答案 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;
}