I wrote a program for Android, which: has the main action for the user interface and starts the service. The service timely pays attention to the activity of the user interface for updating views. It works fine, except: if the action is closed (with BACK) and starts again, the service will be started again (the service plays an audio file, so there are two overlapping sounds). I am using bindService with the BIND_AUTO_CREATE flag to start and connect to the service. According to the document, it should create a service only if it does not exist, but obviously it starts another instance when it is opened a second time. All I want is when the activity is closed, the service continues to work, and when the activity opens again, it can reconnect to the service.Is it possible? Or am I just misunderstanding the use of the service?
Tried more: Use ICountService (described in .aidl) instead of CountService in bindService Intent. It onDestroyed is called when activity is closed.
Below is the code to create the code if it helps.
ServiceConnection conn = new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName c, IBinder b) {
Log.d("TK","Connected");
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);
}
source
share