1

내가 AsyncTask를에서 진행 대화 상자 내 응용 프로그램에 문제가 (longDuration 작업에 대한 스레드 나 AsyncTask를 사용) 1 시간에 표시되지 대화 상자에서 다음 나의 AsyncTaskdoInBackGround()에 인터넷에서 몇 가지에 geting 데이터를하고있다가, 내가 시작하고 진행 대화 상자에서 onPreExecute(), 완료 대화 상자에서 onPostExecute().안드로이드 : 진행

버튼을 클릭하면이 asyncTask가 실행됩니다. 처음이 버튼을 클릭하면 (긴 동작이 발생 함) 진행 대화 상자가 표시되지 않습니다. 그러나 다음 번 Progress 대화 상자가 정상적으로 표시됩니다.

AsyncTask을 처음 실행했을 때 진행률 대화 상자가 표시되지 않는 문제는 무엇입니까? 나는에 대해 별도의 스레드를 사용 AsyncTask를 사용하기 전에

@SuppressWarnings("deprecation") 
@Override 
protected Dialog onCreateDialog(int id) { 
switch (id) { 
case DIALOG_TASKING: 
    mSearchDialog = new ProgressDialog(this); 
    mSearchDialog.setMessage("Searching for field number.."); 
    mSearchDialog.setCancelable(true); 
    return mSearchDialog; 
    } 
return super.onCreateDialog(id); 
} 

: MainActivity에 정의

private class Task_Search extends AsyncTask<Void, Void, Void> { 

@SuppressWarnings("deprecation") 
protected void onPreExecute() { 
    showDialog(DIALOG_TASKING); 
} 

protected Void doInBackground(Void... unused) { 
    //some geting of web content here 
} 

@SuppressWarnings("deprecation") 
protected void onPostExecute(Void unused) { 
    dismissDialog(DIALOG_TASKING); 
} 
} 

진행 대화 상자 :

public void onClickFind(View view){ 
new Task_Search().execute(); 
} 

이 작업 Task_Search입니다 :

은 온 클릭 방법입니다 대신 데이터 다운로드 :에서, 나는 처음으로 progressDialog을 시작했다. 그때 쓰레드는 쓰레드가 끝났을 때 progressDialog이 중지되었다. 동작은 동일했다 : 버튼 대화 상자를 처음 클릭 할 때 wasnt가 표시되고, 다음 번에 표시된다.

누구를 도울 수 있습니까?

답변

0

대화 상자에서 show()를 호출하는 것을 볼 수 없습니다.

이 onPreExecute insode ShowDialog를 호출하지 마십시오

@SuppressWarnings("deprecation") 
protected void onPreExecute() { 
    showDialog(DIALOG_TASKING).show(); 
} 
+0

ShowDialog를 (INT)이 무효 반환, 그래서 이것이 가능하지 않은 작동해서 ProgressDialog가 붙어 1 시간, 다음 시간. – VinceFR

+0

그래, 내가 사용자 정의 방법에 대한 착각. 어쨌든 showDialog를 사용하지 말고 내 자신의 ProgressDialog를 만들고 보여 주길 권한다. – PravinCG

+0

나는 동의한다, 나는 그것을 역시 추천한다! – VinceFR

0

@SuppressWarnings("deprecation") 
protected void onPreExecute() { 
    showDialog(DIALOG_TASKING); 
} 

를 교체합니다(). AsyncTask는 doInBackground()에서 호출 할 수있는 publishProgress() 메서드를 제공하여 UI 스레드에 업데이트를 게시합니다. 또한

public void showProgressDialog() { 
if (mProgressDialog == null) { 
    mProgressDialog = new ProgressDialog(this); 
    mProgressDialog.setMessage("Searching for field number.."); 
    mProgressDialog.show(); 
    return; 
}else{ 
    mProgressDialog.setMessage("Searching for field number.."); 
    mProgressDialog.show(); 
    return; 
} 

}

:

public void closeProgressDialog() { 
if (mProgressDialog != null) { 
    mProgressDialog.dismiss(); 
} 
return; 
} 

나는 다음과 같은 AsyncTask를 변경 : 좋아

+0

'onPreExecute()'는 UI 스레드에서도 실행되며, 그 이유 때문에 제공됩니다. – Geobits

+0

UI 스레드에서 실행되지 않는다고 결코 말한 적이 없습니다. 대화 상자 안에 doInBackground()가 수행 한 진행 상황을 보여주고 자하는 것이 분명합니다. onPreExecute는 doInBackground보다 먼저 실행되므로 어떻게 그에게 대화 상자를 표시 할 수 있습니까? 문제 및 대답을 이해하기 전에 downvote하지 마십시오. –

+1

onPreExecute에서 ProgressDialog를 표시하면 doInBackground의 정보가 필요하지 않습니다. 진도 자체를 업데이트하는 것은 그 일을 보여주는 것과는 아무런 관련이 없습니다. 대부분의 AsyncTask/ProgressDialog 예제는 이런 식으로 처리하며 Google도 권장합니다. ** The 4 Steps **에있는 [here] (http://developer.android.com/reference/android/os/AsyncTask.html)을 읽으십시오. – Geobits

0

, 나는 내 자신의 방법 MainActivity에서 만든

private class Task_Search extends AsyncTask<Void, Void, Void> { 
protected void onPreExecute() { 
    // showDialog(DIALOG_TASKING); 
    showProgressDialog(); 
} 

protected Void doInBackground(Void... unused) { 
//Some long duration stuff here 
} 

protected void onPostExecute(Void unused) { 
    //dismissDialog(DIALOG_TASKING); 
    closeProgressDialog(); 
} 
} 

mProgressDialog

private ProgressDialog mProgressDialog; 

상황이 동일 MainActivity

의 개인 구성원 : wheck 온 클릭 버튼 : 완벽

+0

갇혀서 무엇을 의미합니까? 그것은 불확정 회전을 보여주지 않습니까? – PravinCG

+0

처음 사용법에 표시되지 않습니다 (버튼 작동을 클릭하면 + 회전 진행 대화 상자가 나타납니다), 다음 번에 표시됩니다 .. –

+0

나는 문제가 될 수있는 것을 발견하지 못했고 실제 테스트도했습니다. HW, HTC Sensation 및 삼성 Galaxy Pad 2 및 AVD와 같은 기능 –

관련 문제