2009-08-24 6 views
17

파일을 다운로드하는 서비스가 있습니다. 다운로드가 완료되면 Activity이 실행 중일 때만 내 Activity에있는 "다운로드 한 파일"목록을 업데이트하고 싶습니다. 이미 실행 중이 아니면 Activity을 시작하지 않으려 고합니다.인 텐트를 사용하여 활동을 업데이트하는 방법은 무엇입니까?

나는 특별한 깃발을 넣은 Intent을 새로 만들면 좋겠다.

누구나 내가 어떻게이 문제를 해결할 수 있는지 알 수 있습니까? 아주 작은 코드 예가 ​​있을까요? 당신이 원하는 구성 요소를 업데이트하는 함수를 호출 myReceiver의 onReceive() 메소드를 오버라이드 (override) 해, 그 후

registerReceiver(myReceiver, new IntentFilter(DownloadService.ACTION_FILE_DOWNLOADED)); 

:

답변

19

당신은() 메소드를 새로운 브로드 캐스트 리시버의 인스턴스를 생성하고 활동의 onResume에이 라인을 따라 뭔가를 할 수 :

unregisterReceiver(myReceiver); 
: 액티비티의 onPause에

@Override 
public void onReceive(Context context, Intent intent) { 
... 
    updateViewWithData(service.getNewFileData()); 
... 
} 

() 메소드는, 단지 수신기의 등록을 취소

이것이 도움이되기를 바랍니다. 불명확 한 점이 있으면 언제든지 물어보십시오.

+0

이것은 매우 좋은 방법 통신. 그러나 활동이 일시 중지 상태에있을 때 결과가 전달 된 경우 어떻게해야합니까? 따라서 onResume 활동이 결과를 얻기까지 오랜 시간을 기다릴 수 있습니다. 데이터가 누락되어 데이터가 수신되지 않습니다. –

3

"다운로드 한 파일"활동을 서비스에 바인딩하는 것이 좋습니다. 서비스를 바인딩 할 때 onServiceConnected 함수에서 바인더 콜백을 등록하십시오. 그런 다음 새 데이터를 사용할 수있게되면 서비스는 해당 콜백을 호출합니다. 액티비티가 실행 중이 아니면 서비스 측의 콜백 목록은 비어 있으므로 액티비티를 알리지 않습니다. 이 방법의 예를 들어

는 안드로이드 SDK에 RemoteService.java에서 살펴 :

샘플 \ ApiDemos에 \ SRC \ COM 예를 들어 \ 안드로이드 \ \ API를 \ 응용 프로그램 \

+0

Dimitar Dimitrov와 같은 의도 메시징과 비교했을 때 어떤 이점이 있습니까? 감사 – urSus