2017-10-18 1 views
2

저는 응용 프로그램을 만들고 서버에 데이터를 보내려고합니다. 서버에 보내는 업데이트가 정기적 일 때 서버에 데이터를 보낼 수있었습니다.대기열에서 Asynctask 호출

하지만 이제는 사용자와 상호 작용합니다. 서버에 하나 이상의 호출을 보내야합니다. 저는 건너 뛰기를 할 수없고 서버에 대한 호출을 생략 할 수 있습니다.

케이스 :

하자가 내가 서버에 일부 데이터를 넣어 asyntask를 시작하고 5 ~ 6 초 정도 걸립니다 가정하자의 클릭에 버튼이 말을 그냥 다음과 같은 경우를 가정합니다. 하지만 사용자가 단추를 여러 번 누르면 여러 asyntask를 트리거하고 싶습니다. 버튼을 7 번 연속해서 누르면됩니다. 따라서 7 AsyncTask는 하나씩 대기열에서 실행되어야합니다.

나는 스케쥴러와 다른 모든 것들에 대해 들었지만, asynctask를 사용하여 어떻게 작동하는지 이해할 수 없다.

가능한 해결책 : 첫 번째 비동기 작업이 완료되지 않을 때까지 버튼을 사용 중지 할 수 있습니다.하지만 사용자가 원하는만큼 자주 비동기 작업을 호출해야하므로 필요하지 않습니다. 버튼을 누릅니다.

제발 나를 도와주세요, 어떤 소스 코드도 인정 될 것입니다.

참고 : asynctask를 사용하면 UI를 업데이트 할 수 없습니다.

업데이트 : 내 필요에 따라

내가 특정 데이터와 AsyncTask를 대기열에 원하는 자동 이전 작업이 완료되면 실행해야합니다 사용자 종료가 될 때까지 그것을하지 않는 한 계속 실행해야하는 응용 프로그램의 경우 대기중인 모든 asynctask의 실행을 완료합니다.

+0

동시에 실행 하시겠습니까? –

+0

내 필요에 따라 특정 데이터가있는 asynctask를 대기열에 넣고 싶습니다. 이전 작업이 완료되면 자동으로 실행해야하며 사용자가 응용 프로그램을 종료하면 대기열에있는 모든 asynctask의 실행이 완료 될 때까지 계속 실행해야합니다. –

+0

그런 다음 질문에이 내용을 추가해야합니다. 질문을 수정하십시오 –

답변

1

버튼을 7 번 연속 누른다고 가정 해 보겠습니다. 따라서 7 AsyncTask는 하나씩 대기열에서 실행되어야합니다.

앱이 어떤 API를 대상으로하는지에 따라 특별한 조치를 취하지 않아도됩니다. 제 도입 실행

Official documentation reads:

주문은 AsyncTasks 단일 배경 스레드에 직렬 실행 하였다. DONUT부터는 이 여러 스레드가 병렬로 작동 할 수 있도록 스레드 풀로 변경되었습니다. 벌집을 시작으로, 작업이 병렬 실행에 의한 일반적인 응용 프로그램 오류를 방지하기 위해 단일 스레드에서 실행됩니다

때문에 안드로이드 3.0 execute()부터 모든 당신이 플랫폼의 고대 버전을 지원하지 않는 의미, 정말 필요한 당신 기본적으로 직렬 실행이 표시되어야합니다.

또는 AsyncTask를 하나씩 실행하여 IntentService를 차례대로 삭제할 수 있습니다.

+0

좋습니다. 내 최소 지원 jellybeans입니다 –

+0

나는 그것을 테스트했습니다, 함께하자 모든 aysnctask runing하자 두 번 버튼을 클릭하면, 나는 그들이 끊어지고 더 많은 시간이 걸릴 것으로 나타났습니다 usuall –

+0

무엇보다 '평소보다 더 의미'와 어떻게 측정했는지 궁금하지만, AsyncTasks를 하나씩 실행하는 방법이 문제였습니다. 그리고 나는 그 대답을했다. 또는 제공된 솔루션 (inl. IntentService)을 관리하기 위해 자체 대기열을 작성하지 않아도 사용자의 필요에 맞지 않는 것은 없습니다. 하지만 그것은 현재 질문의 범위를 벗어났습니다. –