java如何在方向改变时处理服务
我正在制作一个音乐播放器应用程序用于学习,但我被困在用户决定改变设备方向的点上,我的应用程序总是重新创建,这是不好的,我已经设法使用onRestoreInstanceState
保存和恢复了所有其他数据,但我想不出一个好的方法来使用musicplayer service
,下面是我代码的一部分,这是很多代码,所以我将重点关注这个问题
public class ManagerActivty extends AppCompatActivity{
//music player service object
private MusicService musicService;
//boolean to keep track of musicservice state
private boolean musicBound = Boolean.FALSE;
//Music service connection object
private ServiceConnection musicServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
if(!instanceSaved) {
MusicService.MusicBinder binder = (MusicService.MusicBinder) iBinder;
musicService = binder.getService();
musicService.setOnSongChangeListener(ManagerActivty.this);
musicService.setOnPlayerStateChangedListener(ManagerActivty.this);
new loadSongAsync().execute();
musicBound = Boolean.TRUE;
System.out.println("Music Service Connected");
}
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
musicBound = Boolean.FALSE;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manager_activty);
}
//method to bind music service with my activity
private void bindMusicService()
{
playMusicIntent = new Intent(this, MusicService.class);
bindService(playMusicIntent, musicServiceConnection, Context.BIND_AUTO_CREATE);
startService(playMusicIntent);
System.out.println("Binder Called");
}
@Override
protected void onStart() {
super.onStart();
//launch binder
bindMusicService();
}
@Override
protected void onDestroy() {
//stop service connection
if (playMusicIntent != null) {
stopGuiUpdates();
unbindService(musicServiceConnection);
stopService(playMusicIntent);
musicService = null;
}
super.onDestroy();
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
System.out.println("Saved Instances");
outState.putBoolean(Constant.IS_MEDIA_PLAYING_PLAYING, musicService.isPlaying());
outState.putInt(Constant.MEDIA_PLAYER_POSITION, musicService.getMediaPlayer().getCurrentPosition());
outState.putBoolean(Constant.IS_MUSIC_REPLAY, musicService.isReplay());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
System.out.println("Retrieving Instances");
//if null try to re-bind service
if(musicService == null) {
bindMusicService();
}
}
当我在方向改变后试图访问musicservice
对象时,这段代码给了我一个nullpointerexception,任何之前处理过这个问题的人请帮助
共 (0) 个答案