我有可以播放音乐的活动和服务。活动的onCreate我启动Service并尝试创建ServiceConnection,在ServiceConnection的onServiceConnected中我初始化了服务,因此此后它不为null。然后,我将service绑定到此serviceConnection。
因此,我的musicService不为null,应用程序正常运行,服务可以发送前台通知。假设我旋转了设备并且旋转了屏幕,我的活动调用了onDestroy和onCreate。我的musicService继续播放,但是在onCreate中有startService,再次创建ServiceConnection和bindService,由于空musicService导致应用程序崩溃。
我透露这是因为从未调用ServiceConnection的onServiceConnected。
我应该怎么做才能连接到我在第一次活动中创建的启动musicService?
我的代码在每个onCreate上运行:
Intent intent = new Intent(this, MusicPlaybackService.class);
startService(intent);
serviceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className,
IBinder service) {
LocalBinder binder = (LocalBinder) service;
musicPlaybackService = binder.getService();
}
public void onServiceDisconnected(ComponentName arg0) {
}
};
bindService(intent, serviceConnection, 0);
最佳答案
我不知道我做了什么,但是行得通。现在我有了这段代码。
Intent intent = new Intent(this, MusicPlaybackService.class);
MyApplication.getAppContext().startService(intent);
serviceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className,
IBinder service) {
LocalBinder binder = (LocalBinder) service;
musicPlaybackService = binder.getService();
// now onServiceConnected calls on screen rotation.
}
public void onServiceDisconnected(ComponentName arg0) {
}
};
MyApplication.getAppContext().bindService(intent, serviceConnection, BIND_AUTO_CREATE);