4

我有播放音乐的活动和服务。onCreate 的活动我 startService 并尝试创建一个 ServiceConnection,在 ServiceConnection 的 onServiceConnected 中我初始化服务,所以在此之后它不为空。然后我将服务绑定到这个服务连接。

所以,我的 musicService 不为空,应用程序工作,服务可以发送前台通知。假设我旋转了我的设备并旋转了屏幕,我的活动调用了 onDestroy 并调用了 onCreate。我的musicService 继续播放,但在onCreate 中有startService,再次创建ServiceConnection 和bindService,由于musicService 为null,应用程序崩溃。

我透露这是因为 ServiceConnection 的 onServiceConnected 现在从未被调用过。我应该怎么做才能连接到我在第一个活动启动音乐服务时创建的?

我在每个 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);
4

1 回答 1

1

我不知道我做了什么,但它有效。现在我有这个代码。

    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);
于 2012-12-16T19:04:49.127 回答