为什么不在onResume中调用服务连接?

时间:2016-03-30 05:12:46

标签: android service onresume realm

我正在开发后台服务,我正在更新服务中的一个Arraylist,从Arraylist我得到索引并播放歌曲。

现在的问题是,如果我想要进行另一项活动,并且在该活动中,我正在将Arraylist更新到服务中,但是当我完成活动并回到MainActivity时,它会#39 ;我没有再次更新Arraylist。

我正在使用领域arraylist来存储数据。

@Override
protected void onStart() {
    super.onStart();
    songConnection();

    if (playIntent == null) {
        playIntent = new Intent(this, MusicService.class);
        bindService(playIntent, musicServiceConn, Context.BIND_AUTO_CREATE);
        startService(playIntent);
    }
}

@Override
protected void onResume() {
    super.onResume();
    songConnection();
}

public void songConnection() {
    musicServiceConn = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            MusicService.MusicBinder binder = (MusicService.MusicBinder) service;
            musicSrv = binder.getService();
            musicSrv.setList(musicRealmResults);
            musicBound = true;
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            musicBound = false;
        }
    };
}

这里的musicRealmResults是Realm Arraylist。

在Albums.java中

musicRealmResults = realm.where(Music.class).equalTo("albums", albums).findAllSorted("albums", Sort.ASCENDING);

在MainActivity.java中

musicRealmResults = realm.where(Music.class).findAll();

因此,在这两项活动中,Arraylist大小将不同,并且根据它应更新到服务的大小。

所以请告诉我为什么在活动结束时它没有在onResume上更新。

请仔细阅读我的帖子并向我推荐一些解决方案。

1 个答案:

答案 0 :(得分:1)

更改您的代码:

@Override
protected void onStart() {

    songConnection();// call this method before calling super

super.onResume();
}

public void songConnection() {
    musicServiceConn = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            MusicService.MusicBinder binder = (MusicService.MusicBinder) service;
            musicSrv = binder.getService();
            musicSrv.setList(musicRealmResults);
            musicBound = true;
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            musicBound = false;
        }
    };
 if (playIntent == null) {
        playIntent = new Intent(this, MusicService.class);
        bindService(playIntent, musicServiceConn, Context.BIND_AUTO_CREATE);
        startService(playIntent);
    }

}

现在您的服务将被正确调用但请务必在此之前的某个时间点停止服务 再次开始。谢谢你,我希望这很有用。