我写了一个Android程序,它有一个主活动用于用户界面,并启动了一个服务。该服务定时回调UI活动以更新视图。它工作正常,只是:如果关闭活动(使用BACK)并重新启动,服务也将被重新启动(服务播放音频文件,因此会有两个重叠的声音)。
我使用bindService和BIND_AUTO_CREATE标志来启动和连接到服务。根据文档,它应该仅在服务不存在时创建服务,但显然在第二次打开时又启动了另一个实例。
我想要的是当活动关闭时,服务继续运行,当活动再次打开时,可以重新连接到服务。这可能吗?还是我误解了服务的用法?
尝试更多: 在bindService Intent中使用ICountService(在.aidl中描述),而不是CountService。当活动关闭时,它的onDestroyed会被调用。
以下是创建服务的代码,如果有帮助的话。
我使用bindService和BIND_AUTO_CREATE标志来启动和连接到服务。根据文档,它应该仅在服务不存在时创建服务,但显然在第二次打开时又启动了另一个实例。
我想要的是当活动关闭时,服务继续运行,当活动再次打开时,可以重新连接到服务。这可能吗?还是我误解了服务的用法?
尝试更多: 在bindService Intent中使用ICountService(在.aidl中描述),而不是CountService。当活动关闭时,它的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);
}
startService()
。信不信由你,它确实有效。 - CommonsWare