2013-05-02 5 views
0

onCreate() (onCreate가 처음 호출 된 경우)에서 서비스를 시작하고 onStart()에서 bindService를 호출합니다. 이 서비스는 잘 작동하지만 bindService를 호출 한 후에 서비스의 로컬 인스턴스가 여전히 null입니다. 또한 getService()가 호출되지 않는 것 같습니다.안드로이드 문제 바인딩 서비스 시작

@Override 
protected void onCreate(Bundle savedInstanceState) { 
... 
if(savedInstanceState == null){ 
    final Intent i = new Intent(this, HostService.class); 
    startService(i); 
} 

} 

protected void onStart(){ 
    super.onStart(); 
    bindService(new Intent(this, StartGameActivity.class), connection, Context.BIND_AUTO_CREATE); 
} 

private ServiceConnection connection = new ServiceConnection(){ 

    @Override 
    public void onServiceConnected(ComponentName arg0, IBinder arg1) { 
     HostBinder binder = (HostBinder) arg1; 
     hostService = binder.getService(); 
     isBound = true; 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName arg0) { 
     isBound = false; 
    } 

}; 

및 HostService에 : 여기 일부 코드 ONSTART()가 호출되고 이유라고 점점되지의 getService이 후

... 
private HostBinder binder = new HostBinder(); 
... 
public class HostBinder extends Binder{ 
    HostService getService(){ 
     Log.d(TAG, "getService"); 
     return HostService.this; 
    } 
} 

@Override 
public IBinder onBind(Intent arg0) { 
    return binder; 
} 

왜 아직도 널 hostService이다 ("의 getService은"아니다 LogCat에서 인쇄)?

들으 & 관련

답변

0

당신은 startService()를 호출 할 필요는 없습니다; bindService()에 의해 시작됩니다.

onStart() 방법의 경우 StartGameActivity.class을 실행하려는 의도가 있습니다. 그게 당신이 원했던가, 시작하려고 했습니까? HostService.class?

둘 다 문제가되지 않는다면 계속 진행해야합니다. onServiceConnected()onBind() 메쏘드에 로깅 문을 넣을 수 있도록 호출 할 수 있습니까?

흥미로운 로그캣 메시지가 있습니까?

바인더를 통해 또는 메시징을 통해 서비스를 이야기하고 있습니까?

+0

아. 예, 나는 HostService.class를 의미했습니다. 몇 시간 동안 나를 괴롭혔다. : dxx 많이 :) – user2224350

+0

나는 당신의 질문을 이해할 수 있을지 잘 모르겠지만, 만약 그렇다면, 문제는 서비스가 바인드 요청과 안드로이드에 응답하는 데 시간이 걸린다는 것이다. 시스템은 onCreate()가 기다리는 것을 원하지 않습니다. 따라서 요청은 비동기 적으로 처리되며 나중에 onServiceConnected()가 호출됩니다. –

+0

@ user2224350 -이 질문에 답변으로 표시되도록 답변을 수락하십시오. –

관련 문제