如何在服务中设置START_STICKY

时间:2015-04-03 20:08:09

标签: android service

我希望确保即使在用户关闭应用程序(来自任务管理器或相关应用程序)后,我的服务仍在后台运行。我正在尝试实现START_STICKY,但不知道如何正确覆盖startService方法以允许此工作。

目前,我只是使用startService方法启动并将LoggingIn.classMessagingService.class绑定为:{/ p>

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并确保即使在应用关闭后我的服务仍然有效或重新启动?

2 个答案:

答案 0 :(得分:4)

您需要做的就是在START_STICKY方法中返回onStartCommand()标记:

@Override
public int onStartCommand (Intent intent, int flags, int startId){

    // several lines of awesome code

    return START_STICKY;
}

进一步考虑:

如果您使用Service而未覆盖onStartCommand(),则默认情况下会返回START_STICKY,但通常由Service运行的代码会放在onStartCommand()中方法。

那就是它。你已经完成了,回家了。

答案 1 :(得分:0)

确保您的服务在任务管理器中被解雇后继续运行的唯一方法是将其作为前台服务:

@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 不是解决方案。