活动娱乐后连接到服务

时间:2012-12-16 07:47:49

标签: java android service android-activity

我有播放音乐的活动和服务。 onCreate of activity我startService并尝试在ServiceConnection的onServiceConnected I初始化服务中创建ServiceConnection,因此在此之后它不为null。然后我将bindService绑定到此serviceConnection。

所以,我的musicService不为null,应用程序正常,服务可以发送前台通知。假设我旋转了设备并旋转屏幕,我的活动调用onDestroy并调用onCreate。我的musicService继续播放,但在onCreate中有startService,再次创建ServiceConnection和bindService,应用程序由于null 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);

1 个答案:

答案 0 :(得分: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);