2012-03-05 5 views
0

나는 android와 안드로이드에서 새로운이야. 진행 대화 상자를 올바르게 구현하는 데 문제가 있습니다.안드로이드에서 진행률 대화 상자를 올바르게 처리하는 방법은 무엇입니까?

내가이

ProgressDialog dialog= new ProgressDialog(Main.this); 
    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    dialog.setMax(100); 
    dialog.show(); 
    MY METHOD WHICH GRABS DATA FROM INTERNET; 
    dialog.dissmiss(); 

같은 코드를 가지고 있지만이를 구현하여, 내 방법이 잘 실행하지만 진행 대화 상자 내가 주석 방법을 해고 할 때 다시 볼 수없는, 대화 나던 정지와 나는에 있었다 강제로 응용 프로그램을 닫은 다음이 대화 상자를 사용하는 방법? 어떤 스레드도 여기에 가져오고 싶지 않다면, 스레드를 사용하지 않고 대화를 사용하는 방법이 있습니까? 감사합니다

+0

[여기는 완벽한 안내서입니다.] (http://developer.android.com/guide/topics/ui/dialogs.html#ProgressDialog) – Ruuhkis

답변

4

여기서 문제는 인터넷에서 데이터를 가져 오는 것과 같은 장기 실행 작업을 별도의 스레드에서 실행해야한다는 것입니다. 그렇지 않으면 코드가 5 초 이상 실행될 때 ANR이 발생할 가능성이 있습니다. 이상적인 해결책은 AsyncTask을 구현하는 것입니다.이 도구를 사용하면 별도의 스레드에서 작업을 실행할 수 있으며 UI 스레드를 쉽게 업데이트 할 수 있으며 ProgressDialog 또는 ProgressBar을 표시하여 사용자에게 앱이 현재 사용 중임을 알릴 수 있습니다. ProgressDialog 초기화 코드를 onPreExecute() 메서드 안에 넣고 AsyncTask을 넣고 dialog.dismiss()onPostExecute()으로 호출하면됩니다. 희망이 도움이됩니다.

+0

고마워요. 이걸 시도해보고 있습니다. –

+0

수 있습니까? asynctask에 대한 적절한 예를 들어 주시겠습니까? –

+0

@SabbirAhmed, 네,이 게시물은 나를 위해 유용했습니다 : http://developer.android.com/resources/articles/painless-threading.html – Egor

1

예, 스레드 클래스를 사용할 필요가 없습니다. 대신 AsyncTask를 사용할 수 있습니다. AsyncTask를 호출 할 때 진행 대화 상자를 시작하고 postExecute 메소드에서이를 닫습니다.

1

저는 개인적으로 진행 대화 상자에 AsyncTask를 선호합니다.

onPreExecute에서 위 코드를 만듭니다. doInBackground에서 백그라운드 작업을 수행하고 onPostExecute에서 작업 완료를 알리는 경고 대화 상자를 표시합니다!

+0

내가 한 말했지만, onPreExecute 메서드는 dialod 또한 해고되지 않습니다 backgrond 일이 일어나지 않는다 –

+0

doInBackground에서 작업이 완료된 후 dialog.dismiss()를 말하십시오. –

+0

onPreExecute에서 닫지 마십시오. –

관련 문제