2017-12-16 4 views
0

나는 asynctask를 실행하여 taks.in onPostExecute 메서드를 실행했습니다. 다른 Asynctask를 실행했는데 거의 50 번 실행했습니다.실행중인 AsyncTask의 수를 조사하여 progressBar로 표시합니다.

@Override 
protected void onPreExecute() { 
    progressBar = new ProgressBar(MainActivity.this,null,android.R.attr.progressBarStyleHorizontal); 
    progressDialog = new AlertDialog.Builder(MainActivity.this, 
.... 


protected void onPostExecute(String result) { 
... 
for (Get_NIdCadastre_NIdVisitContractCadastre get : a) { 
get_List_Visit visit = new get_List_Visit(get.getNIdCadastre(), get.getNIdVisitContractCadastre()); 
visit.executeOnExecutor((AsyncTask.THREAD_POOL_EXECUTOR), NIdCadastre, NIdVisitContractCadastre); 
... 
if (progressDialog.isShowing()){ 
    progressDialog.dismiss(); 
} 

이제 get_List_Visit 작업에 에서 내가 작업의 수를 표시합니다 publishProgress에 의해 방법을 doInBackground 실행 중이거나 해당 작업은 작업이 완료되었습니다

private class get_List_Visit extends AsyncTask<String, String, String> { 

@Override 
    protected void onProgressUpdate(String... values) { 
    //? 

마다 의미입니다 실행하고있는 새로운 태스크입니다. 표시하고 싶은 태스크는 몇 개입니까 !!!

나는 약 AsyncTask.Status.RUNNING에 대해 알고 있지만 어떻게 이것을 내 상황에 사용할 수 있습니까? 내 영어로 죄송합니다 !!!

어떻게 할 수 있습니까? 안드로이드 문서에서

답변

0

:

AsyncTasks 이상적으로 짧은 작업에 사용되어야한다 (.에 몇 초 을 가장) 당신이 오랜 시간 동안 실행 스레드를 유지해야하는 경우는 매우이다 Executor, ThreadPoolExecutor 및 FutureTask와 같은 java.util.concurrent 패키지가 제공하는 다양한 API를 사용하는 것이 좋습니다.

https://developer.android.com/reference/android/os/AsyncTask.html

AsyncTask를 당신이 무슨 말을하는지의 소리에서 작업에 적합한 도구가 아닙니다. 나는 Volley을 들여다 보길 권한다.

AsyncTask 방식을 고집하는 경우 위임/프로토콜 디자인 패턴을 사용하여 구현할 수 있습니다. 그런 다음 활동의 포스트 백에서 진행률 막대를 적절히 업데이트 할 수 있습니다. 저에서

+0

무엇? Volley는 네트워킹을위한 것이지만 AsyncTask에서 네트워크 작업을하고 있다고 말하는 것은 아무것도 없습니다. – donfuxx

0

작은 제안 Staticint variable 먼저 asyncTask의 시작에서 하나를 증가 타고 result 감소시키고 그것을 최종적으로 ProgressBarvariable의 현재의 결과를 보여 명쾌한 설명 부탁해 것입니다.

관련 문제