有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案