2010.10.18 15:52


ProgressDialog를 사용하다 보면 백그라운에서 작업 할 상황이 있고, 포그라운드 (View) 에서 작업 할 상황이 생긴다. 

이러한 상황이 생겼을 경우, 각 상황에 맞게 분리하는 작업으로 AsyncTask를 이용하면 편리하다. 

---------------------------------------------------------------------------------------------------------------------

class Test extends AsyncTask<String, Integer, Integer>
{
String[] text;
int count; 
           
@Override
protected void onPreExecute() {         
                       //작업을 시작하기전 수행 된다. View 작업 수행              
super.onPreExecute();
Toast.makeText(Instu_testActivity.this, "작업을 시작합니다.", Toast.LENGTH_SHORT);
mDialog.show();
}
@Override 
protected void onPostExecute(Integer result) {     
        //작업을 끝내고 나서 수행 된다. View 작업 수행
super.onPostExecute(result);
Toast.makeText(Instu_testActivity.this, "작업이 끝났습니다.", Toast.LENGTH_SHORT);
mDialog.dismiss();
}
@Override
protected void onProgressUpdate(Integer... values) {
                        //doInBackground 메소드에 있는,  publishProgress 메소드에 의해 불려 진다. 
                        //여기서는 계속해서 progressdialog의 수를 증가 시켜주고, params로 인해 받아온 string값을 
            //message에 보여줌.  
super.onProgressUpdate(values);
mDialog.setProgress(values[0]);
if(values[0]%10 == 0)
{
mDialog.setMessage(text[values[0]/10]);
}
}
@Override
protected Integer doInBackground(String... params) {
                        //Background 작업 수행
text=params;
for(int i=0; i<mDialog.getMax(); i++)
{
try
{
Thread.sleep(500);
}catch(Exception ex){}
this.publishProgress(i);
}
return null;
}
}

.........

mDialog=new ProgressDialog(this);  
    mDialog.setMax(100);
mDialog.setTitle("ProgressDialog Test");
mDialog.setMessage("Test");
mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);   //ProgressDialog.STYLE_SPINNER
new Test().execute("1","2","3","4","5","6","7","8","9","10");


신고
Posted by 구름같은사나이

티스토리 툴바