Я написал программу для Android, которая: имеет основное действие для пользовательского интерфейса и запускает службу.Служба своевременно выполняет обратный вызов активности пользовательского интерфейса для обновления представлений.Он работает нормально, за исключением того, что: если действие закрыто (с помощью НАЗАД) и запустится снова, служба также будет запущена снова (служба воспроизводит аудиофайл, поэтому имеются два перекрывающихся звука).Я использую bindService с флагом BIND_AUTO_CREATE для запуска и подключения к сервису.Согласно документу, он должен создавать сервис, только если он не существует, но, очевидно, он запускает другой экземпляр при открытии во второй раз.Все, что я хочу, это когда активность закрыта, служба продолжает работать, а когда операция открывается снова, она может повторно подключиться к службе.Это возможно?Или я просто неправильно понимаю использование службы?
Попробовал еще: использовать ICountService (описанный в .aidl) вместо CountService в bindService Intent.Он onDestroyed вызывается, когда действие закрывается.
Ниже приведен код создания службы, если это помогает.
ServiceConnection conn = new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName c, IBinder b) {
Log.d("TK","Connected");
//binder = (ICountService.Stub) b;
service = ICountService.Stub.asInterface(b);
try {
service.setCallback(new ICountCallback.Stub(){
@Override
public void alert() {
Log.d("TK","alert!");
}
@Override
public void updateTime(final int sec) {
handler.post(new Runnable(){
@Override
public void run() {
indicator.setText(toText(sec));
}
});
}
});
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName c) {
Log.d("TK","Disconnected");
}
};
private void startCountService(){
Intent i = new Intent(ICountService.class.getName());
boolean ok = context.bindService(i, conn, Context.BIND_AUTO_CREATE);
Log.d("TK", "bindService="+ok);
}