如何在服务中设置 START_STICKY
How to setup START_STICKY in service
我希望确保我的服务即使在用户关闭应用程序(从任务管理器或相关应用程序)后也能在后台运行。我正在尝试实施 START_STICKY
但不知道如何正确覆盖 startService
方法以使其正常工作。
目前我只是简单地使用startService
方法来启动和绑定LoggingIn.class
到MessagingService.class
如:
startService(new Intent(LoggingIn.this, MessagingService.class));
我研究过 onStartCommand
方法是实现 START_STICKY
的常用位置,但我没有发现我的应用程序需要它,因为服务启动后我会绑定所有其他方法类 给它:
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
imService = ((MessagingService.IMBinder) service).getService();
}
public void onServiceDisconnected(ComponentName className) {
imService = null;
Toast.makeText(GroupMessaging.this, R.string.local_service_stopped,
Toast.LENGTH_SHORT).show();
}
};
和
bindService(new Intent(GroupMessaging.this, MessagingService.class),
mConnection, Context.BIND_AUTO_CREATE);
如何正确实施 START_STICKY
并确保即使在应用程序关闭后我的服务仍保持活动状态或重新启动?
您需要做的就是 return onStartCommand()
方法中的 START_STICKY
标志:
@Override
public int onStartCommand (Intent intent, int flags, int startId){
// several lines of awesome code
return START_STICKY;
}
进一步考虑:
如果您使用 Service
而不覆盖 onStartCommand()
,它默认 returns START_STICKY
,虽然通常代码 运行 由 Service
放在 onStartCommand()
方法中。
就是这样。完了,回家吧。
在任务管理器中关闭后确保您的服务继续运行的唯一方法是将其设为前台服务:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
startForeground(ONGOING_NOTIFICATION_ID, notification);
return super.onStartCommand(intent, flags, startId);
}
阅读此处:https://developer.android.com/guide/components/services.html#Foreground
单独返回 START_STICKY 不是解决方案。
我希望确保我的服务即使在用户关闭应用程序(从任务管理器或相关应用程序)后也能在后台运行。我正在尝试实施 START_STICKY
但不知道如何正确覆盖 startService
方法以使其正常工作。
目前我只是简单地使用startService
方法来启动和绑定LoggingIn.class
到MessagingService.class
如:
startService(new Intent(LoggingIn.this, MessagingService.class));
我研究过 onStartCommand
方法是实现 START_STICKY
的常用位置,但我没有发现我的应用程序需要它,因为服务启动后我会绑定所有其他方法类 给它:
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
imService = ((MessagingService.IMBinder) service).getService();
}
public void onServiceDisconnected(ComponentName className) {
imService = null;
Toast.makeText(GroupMessaging.this, R.string.local_service_stopped,
Toast.LENGTH_SHORT).show();
}
};
和
bindService(new Intent(GroupMessaging.this, MessagingService.class),
mConnection, Context.BIND_AUTO_CREATE);
如何正确实施 START_STICKY
并确保即使在应用程序关闭后我的服务仍保持活动状态或重新启动?
您需要做的就是 return onStartCommand()
方法中的 START_STICKY
标志:
@Override
public int onStartCommand (Intent intent, int flags, int startId){
// several lines of awesome code
return START_STICKY;
}
进一步考虑:
如果您使用 Service
而不覆盖 onStartCommand()
,它默认 returns START_STICKY
,虽然通常代码 运行 由 Service
放在 onStartCommand()
方法中。
就是这样。完了,回家吧。
在任务管理器中关闭后确保您的服务继续运行的唯一方法是将其设为前台服务:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
startForeground(ONGOING_NOTIFICATION_ID, notification);
return super.onStartCommand(intent, flags, startId);
}
阅读此处:https://developer.android.com/guide/components/services.html#Foreground
单独返回 START_STICKY 不是解决方案。