2011-12-28 6 views
1

AsyncTask을 사용하는 동기화 서비스가 있습니다. 그 객관적 (동기화) 때문에, 나는 그 사용자를 차단하고 그에게 진행 과정을 보여주기를 더 좋아한다. (존재하는 경우 오류가 있습니다)Android에서 서비스와 progressdialog를 연결하는 방법

또 다른 어려움은 약이 동시에 실행된다는 것입니다. 따라서 작업을 시작할 때 진행 대화 상자 페이지를 호출하고 작업이 끝나면 닫을 수는 없습니다. 그것은 더 복잡합니다.

누군가 나를 도와 줄 수 있습니까?

안부

+0

서비스로 정확히 무엇을 의미합니까? 실제로 서비스를 실행하고 있습니까? 아니면 이러한 작업을 수행하는 활동의 구성 요소가 있습니까? – MrJre

+0

나는 android Service로부터 상속받은 클래스를 가지고있다. 해당 서비스를 시작하면 asyntask (json 웹 서비스)를 호출하고 응답이있을 때 asynctask는 서비스 기능을 호출합니다. 이 함수는 올바른 함수를 호출합니다 (예 : FillUsers). –

답변

1

우선 서비스의 요점은 배경에서 발생하기 때문에 사용자가 물건을 할 필요가 없거나 차단할 필요가 없다는 것입니다. 이러한 측면에서 보면 서비스에는 UI 스레드가 없으므로 활동에 진행률 표시 줄을 표시하려면 진행 상황을 전환 할 수 있도록 (브로드 캐스트 수신기를 사용하여) 의도를 액티비티로 보내야합니다 바 on/off와 다른 마술을합니다.

작업을 수행하는 데 시간이 오래 걸릴 수 있으므로 사용자 차단이 권장되지 않습니다. 서비스 가져 오기가 데이터를 가져 오지 않는 한 가져 오는 데이터가 로컬에서만 사용되는 경우 (예 : 최신 트위터 메시지 등을 가져 오는 경우) 서비스에서 ASyncTask로 이동하려는 경우라도 서비스를 다시 고려할 수도 있습니다 앱의 다른 부분 (예 : 위젯)에서 사용되며 활동이 실행되지 않아도 데이터를 사용할 수 있기를 원합니다.

+0

잘 동기화 된 데이터는 내 응용 프로그램에 필수 항목입니다. 비즈니스 응용 프로그램이며 고객과 같은 데이터를 동기화하고 사용자가 사용자를 선택하고 해당 사용자가 숨겨져 있는지 확인하려고합니다. 이상한 행동이있을 수 있습니다. 왜 서비스를 사용했는지 기억이 나지 않습니다. 작동하지 않는 무언가가 있었고 지금은 작동 할 수도 있습니다. 제 경우에는 두 가지 주요 기능 1) 동기화가 끝나면 사용자에게 말하기 2) 실패가 있으면 다시 시도하십시오 (다시 시도하십시오) –

+0

이 경우 서비스가 의도 필터 또는 특정 브로드 캐스트를 통해 수신 할 수있는 의도 된 브로드 캐스트를 통해 동기화가 완료/실패했음을 알리는 서비스를 보내야합니다 또는 Android 알림 표시 줄에 알림을 표시 할 수 있습니다. – MrJre

2

onPreExecute(), onProgressUpdate(Progress...) AsyncTask를하고있는 onPostExecute(Result)는 UI 스레드에서 호출된다. 이를 사용하여 진행률 표시 줄을 표시하고 동기화가 진행되면 업데이트하고 작업이 끝나면 숨길 수 있습니다.

8 개의 동시 비동기 작업에 대해 실제로 8 개의 동시 작업이 필요합니까? 단일 AsyncTask를 사용하여 하나의 백그라운드 스레드에서 순차적으로 실행할 수 있습니까?

+0

정확히 내 생각 ... –

+0

잘 asynctask는 서비스에 의해 호출됩니다. 서비스가 진행 대화를 호출 할 수 있습니까, 아니면 활동에 제한이 있습니까? 그리고 8 개의 동시 작업이 필요하지 않습니다. 코드를 다시 작성하고 있습니다 ... –

0

progress dialog을 사용하면 대기 커서를 표시 할 수 있습니다. 또한 응용 프로그램에서 CountDownLatch의 개념을 모방하여 커서를 닫을 수 있습니다. 당신은 updateTaskComplete와 같은 클래스에서 정적 함수를 가질 수 있고 정적 카운터를 업데이트 할 수 있습니다. 그리고 카운터가 비동기 작업의 수와 같으면 updateTaskComplete 함수에서 진행 커서를 취소합니다. 이 줄에서 뭔가를해야한다는 뜻입니다.

관련 문제