Липкий сервис не перезапускается при создании в пользовательском объекте
У меня был объект Singleton, который имел привязанный сервис. Я хотел, чтобы он перезапустился, и когда я запускаю свое приложение из модуля запуска, синглтон-объект инициализируется и привязывается к этому существующему экземпляру службы.
Вот код для создания и привязки сервиса в синглтоне:
public class MyState {
private static MyState sState;
private MyService mService;
private Context mContext;
private boolean mBound = false;
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MyService.MyBinder binder = (MyService.MyBinder) service;
mService = binder.getService();
mBound = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
mBound = false;
}
};
public static MyState get(Context context) {
if (sState == null) {
sState = new MyState(context);
}
return sState;
}
public MyState(Context context) {
mContext = context.getApplicationContext();
startService();
}
private void startService() {
Intent intent = new Intent(mContext, MyService.class);
mContext.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
// this won't create another instance of service, but will call onStartCommand
mContext.startService(intent);
}
}
А вот код службы инсайда
public class MyService extends Service {
private final IBinder mBinder = new MyBinder();
public class MyBinder extends Binder {
MyService getService() {
return MyService.this;
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
// this method is called by singleton object to stop service manually by user
public void stop() {
stopSelf();
}
@Override
public void onDestroy() {
super.onDestroy();
// some cleanup code here
}
}
К сожалению, когда я удаляю свое приложение в списке задач, эта служба никогда не перезапускается. В этом случае метод onDestroy службы никогда не вызывается.
Я перенес привязку на действие, при котором пользователь может взаимодействовать со службой, и неожиданно оно заработало, как я и ожидал. Я попытался вызвать создание сервиса, используя контекст приложения внутри моей деятельности, и он все еще работает.
Отличается ли запуск службы от активности от запуска обычного Java-объекта?