[출처] Android에서 ProgressDialog창 띄우기|작성자 권혜영
* 방법
1. Thread 사용
2. Handler 사용
3. AsyncTask 사용
1. Thread 사용
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
progressBar = new ProgressDialog(this);
progressBar.setTitle("Test");
progressBar.setMessage("progressing...");
progressBar.setCancelable(false);
progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressBar.show();
Thread thread = new Thread(new Runnable() {
private int i=0;
public void run() {
for( i = 0; i < 10000; i++){
Log.d("Test", "i = "+i);
if(i %100 == 0){
runOnUiThread(new Runnable(){
@Override
public void run() {
progressBar.setProgress(i/100);
}
});
}
}
runOnUiThread(new Runnable(){
@Override
public void run() {
progressBar.dismiss();
}
});
}
});
thread.start();
}
2. Handler 사용
핸들러가 새로운 스레드로 동작하지는 않는다.(When you create a new Handler, it is bound to the thread / message queue of the hread that is creating it.)
그러면, 스레드를 생성한 다음에 그 안에서 핸들러를 만들어야 된다는 말인가?
Thread thread = new Thread(new Runnable() {
public void run() {
MyHandler h = new MyHandler();// Handler를 UIThread에서 생성하고, 그곳으로 send해야할 듯.
h.sendMessage(Message.obtain(null, 100));
}
});
thread.start();
그런데 이렇게 하면 아래의 에러가 난다.
handler inside thread that has not called looper.prepare()
일단 얘는 패스.
3. AsyncTask 사용
new MyAsyncTask().execute("2000", "2500", "3000", "1500", "2000");
private class MyAsyncTask extends AsyncTask<String, Integer, Long>{
@Override
protected void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
}
@Override
protected void onPostExecute(Long result) {
// doInBackground가 끝난 후 UI Thread를 호출한다.
progressBar.dismiss();
Toast.makeText(thiz, "Total spent time is : "+result, Toast.LENGTH_LONG).show();
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
// MyAsyncTask.execute가 호출되자 마자, UI스레드에서 실행 됨
progressBar.show();
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... values) {
// publishProgress의 콜백함수. UI Thread를 호출한다.
super.onProgressUpdate(values);
progressBar.setProgress(values[0]);
}
@Override
protected Long doInBackground(String... params) {
// onPreExecute호출이 끝나고 실행되는 함수
// 계산 결과는 publishProgress(Progresss...)함수를 통해 실행하기
long totalTimeSpent = 0;
int numberOfParams = params.length;
for(int i = 0; i < numberOfParams; i++){
SystemClock.sleep(new Integer(params[i]));
totalTimeSpent += new Long(params[i]);
publishProgress((int)(((i+1)/(float)numberOfParams)*100));
}
return totalTimeSpent;
}
}
[출처] Android에서 ProgressDialog창 띄우기|작성자 권혜영
'개발도구 > aOS - 안드로이드 개발' 카테고리의 다른 글
[안드로이드] 트위터 스크랩할때 검정색 화면때문에.. (0) | 2011.06.14 |
---|---|
[안드로이드] 시간 메소드 - Timer, handler, CountDownTimer (0) | 2011.06.13 |
[안드로이드] 데이터를 처리하는 동안 progressDialog 표시하기 (0) | 2011.06.10 |
[안드로이드] 스크롤 Scroll 위치 값으로 얻어내기 (0) | 2011.06.09 |
[안드로이드] 날짜 date 값 -Calendar (0) | 2011.06.09 |