2016-08-10 4 views
0

정상적인 방법 :new를 호출하여 android에서 바운드 서비스 클래스를 인스턴스화 할 수 있습니까? 바운드 서비스 사용의

MusicService music=new MusicService(); 

예, 두에서 얻은 두 인스턴스 사이에 차이가있을 경우 대신이의

private ServiceConnection musicConnection = new ServiceConnection() { 

    public void onServiceConnected(ComponentName name, IBinder service) { 
    MusicBinder binder = (MusicBinder)service; 
    //get service 
    musicSrv = binder.getService(); 
    //pass list 

    musicBound = true; 
    } 

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



Intent playIntent = new Intent(this, MusicService.class); 
bindService(playIntent, musicConnection, Context.BIND_AUTO_CREATE); 

을, 우리는이를 사용할 수 없습니다 다른 방법들?

+0

'새 MusicService();'는 아무 것도 바인딩하지 않으며 단지 객체를 구성합니다. –

+0

동의합니다. 그러나 나에게있어서 바인딩의 주된 이유는 서비스 객체의 인스턴스를 얻는 것입니다. 그래서 서비스 클래스에 onBind 메소드를 구현해야합니다.이 메소드는 궁극적으로 서비스 객체 자체를 반환하는 바인더를 반환합니다. –

+0

'활동'과 동일하게 활동을 새로 시작할 수 없습니다. – li2

답변

2

바인드 서비스 또는 시작 서비스로 인해 대상 서비스의 라이프 사이클 메소드가 호출됩니다. 이 서비스가 아직 실행 중이 아니면 인스턴스화되고 시작됩니다 (필요한 경우 프로세스 생성). 실행 중이면 계속 실행됩니다.

새로운 서비스는 새로운 객체를 만드는 것입니다. 아무것도 의미하지 않습니다. 시스템은 아무것도 알지 못합니다.

활동과 마찬가지로 활동을 새로 시작할 수 없으므로 활동을 시작해야하며 ActivityManager은 활동 인스턴스 작성에 대한 응답이고 해당 onCreate 메소드를 호출합니다.