2012-05-08 2 views
0

나는 이것에 대한 연구를 해왔지만 명확한 대답을 찾지 못했습니다.백그라운드 서비스 프로세스 리 바인딩

기능적 과제는 다음과 같습니다

가) 버튼 레이아웃 (OK)

B) (START를 표시) IST는 백그라운드 서비스를 시작 클릭으로 활동을 시작 (OK)

C 활동이 종료 될 수 있지만), 배경 서비스 내 알림에서 볼 수있는 백그라운드 프로세스가 여전히)) (실행

D를 확인을 계속해야 (OK)

e) 알림 (확인)에서 작업이 다시 시작됩니다.

f) 작업이 프로세스에 연결되어 해당 작업의 상태를 가져와야합니다. 단순히 서비스가 실행 중인지 확인하고 시작 - 중지 버튼의 레이블을 (b)에서 STOP으로 설정하십시오.

e) 버튼을 누르면 서비스가 중지되어 작동합니다.

내 서비스 LogoTimerService에 대한 연결이 같은 활동에 수행됩니다 : 이력서에

private ServiceConnection mConnection = new ServiceConnection() { 

    @Override 
    public void onServiceConnected(ComponentName className, IBinder service) { 
     // We've bound to LocalService, cast the IBinder and get 
     // LocalService instance 
     LogoTimerServiceBinder binder = (LogoTimerServiceBinder) service; 
     mService = binder.getService(); 
     mBound = true; 
    } 

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

내가 실제로 연결이 함수를 호출 : 여기

은 몇 가지 세부 사항입니다

private void connectLogoTimerService() { 
    Log.i(tag, "-connecting service"); 

    Intent intent = new Intent(this, LogoTimerService.class); 
    startService(intent); 
    bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 

    if (mService!=null) 
     Log.i(tag, "-SERVICE BOUND"); 
    else 
     Log.i(tag, "-Service NOT bound"); 
} 

처음 응용 프로그램을 시작할 때 두 번째 (바인딩되지 않음) 메시지가 표시됩니다.

왜 바인딩되지 않습니까? 천천히가는거야? (마치 놀고있는 것처럼 보입니다.)

활동을 파괴하지 않으면 mService가 발견됩니다.

어떻게 상태를 동기화 할 수 있습니까?

서비스를 시작하고 바인딩합니다. 이 올바른지?

나는 (이 사이트에서 찾았 감사) 서비스가이 코드를 사용하여 실행되는 것을 볼 수 있습니다

private boolean isMyServiceRunning() { 
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager 
      .getRunningServices(Integer.MAX_VALUE)) { 
     if (LogoTimerService.class.getName().equals(
       service.service.getClassName())) { 
      return true; 
     } 
    } 
    return false; 
} 

는 당신의 도움을 주셔서 감사합니다!

답변

0

첫 번째 질문에 대한 대답은 bindService가 'async'이기 때문입니다. onServiceConnected가 호출되기 전에 if 문을 입력합니다.

+0

정보가 다시 연결되면 어떤 방법 으로든 되돌릴 수 있습니까? – user929995

+0

먼저 BindService를 호출하면 안드로이드 시스템이 바인딩을 시작하고 완료되면 onServiceConnected가 호출됩니다. 이 시점에서 서비스와 응용 프로그램은 묶여서 갈 준비가되어 있습니다. –

+0

고맙습니다. 작동합니다. – user929995

관련 문제