2011-10-04 6 views
2

프로젝트의 시작 부분에서 실행하는 MainActivity에 대한 원격 서버에서 URL을 가져 오는 서비스가 있습니다.서비스가 완료된 후 주요 활동을 알리는 방법은 무엇입니까?

문제는 활동이 실행되기 전에 이러한 URL이 필요하다는 것입니다.

활동이 처음 시작될 때 서비스가 시작됩니다.

URL을 sharedpreference에 넣으면 검색됩니다.

하지만 이때까지 활동이 이미 기본 이미지를로드했습니다. 어댑터를 사용하여 이미지를 레이져로드합니다.

어떻게하면 활동을 스스로 새로 고치거나 BaseAdapter를 새로 고침하여 서비스를 마친 후 이미지를 다운로드 할 수 있습니까?

더 좋은 아이디어는 환영합니다!

답변

1

Service에서 Activity을 업데이트해야하는 경우 BroadcastReceivers을 조사해야합니다.

googled 자습서는 here입니다.

+0

나는 방송 수신기에 대해 충분히 알고있다. 실제로, 나는 그것을 발사하기 위하여 경보가 울린 후에 나의 서비스를 발사하기 위하여 것을 사용한다. 이것이 어떻게 유익 할 것입니까? – user856377

+0

URL이 서비스에서 검색되면 URL을 추가로 저장 한 브로드 캐스트를 보냅니다. 서버에서 가져온 각 이미지 URL에 대해 브로드 캐스트를 보낼 수 있습니다. 이렇게하면 이미지가 모두 완료되기를 기다리지 않고 다운로드 한 이미지를로드 할 수 있습니다. 귀하의 서비스는 방송을 보내고 귀하의 활동은 수신기가있는 것입니다. –

+0

제안 사항을 구현 한 코드 예제를 제공해 주시겠습니까? – user856377

0

먼저 이미지 URL을 다운로드 할 때 Service을 사용하지 않아야합니다. 대신 배경 스레드에서 AsyncTask을 사용하여이 작업을 수행하십시오. 각 AsyncTaskImageView의 핸들을 유지할 수 있으며 이미지 다운로드가 완료되면 onPostExecute에서 이미지를 설정할 수 있습니다.

+0

Ive는 전에이 방법을 사용했습니다. 유일한 문제는 내가 캐시에 이미지를 저장할 것이기 때문에 URL이 시간이 걸리고 활동이 열릴 때마다 실행되고 싶지 않다는 것입니다. 따라서 URL이 매 주말마다 바뀔 것이기 때문에 서비스를 운영했습니다. URL을 가져 오길 원할 때입니다. 이 문제는 다음과 같습니다. 처음에는 URL이 없으므로 이미지로드없이 활동이 시작됩니다. 두 번째 문제는 서비스가 완료되면 활동을 알리고 어댑터의 이미지를 새로 고치는 방법이 없다는 것입니다. – user856377

+0

캐시가 메모리에 있습니까? 아니면 디스크에 있습니까? 다운로드 한 이미지를 파일에 저장하는 것이 좋습니다. 디스크가 다운로드되기 전에 디스크에서이를 확인할 수 있으므로 많은 지연이 발생하지 않습니다. 서비스를 사용하는 것은 잔인하며 여기에 필요한 것보다 훨씬 복잡합니다. 나는 BroadcastReceivers를 망쳐 놓을 것을 제안하지 않는다. 단지 다른 작업을 더 복잡하게 만들 뿐이다. –

1

새로운 로더 클래스를 사용해보십시오. 그들은 멋지다 .http : //developer.android.com/reference/android/content/AsyncTaskLoader.html. 11 미만의 API 수준으로 개발하는 경우 Backwards Compatibility 패키지를 사용할 수 있습니다. http://developer.android.com/resources/articles/backward-compatibility.html

+0

AsyncTaskLoader에 대한 링크> – user856377

+1

http://developer.android.com/reference/android/content/AsyncTaskLoader.html –

관련 문제