2011-03-05 1 views

답변

60

AsyncTask에 데이터를로드하고 인터페이스를 업데이트해야합니다. 데이터로드가 완료되면

AsyncTask의 onPostExecute() 메소드에서 새 활동을 시작할 수도 있습니다.

public class MyTask extends AsyncTask<Void, Void, Void> { 
    public MyTask(ProgressDialog progress) { 
    this.progress = progress; 
    } 

    public void onPreExecute() { 
    progress.show(); 
    } 

    public void doInBackground(Void... unused) { 
    ... do your loading here ... 
    } 

    public void onPostExecute(Void unused) { 
    progress.dismiss(); 
    } 
} 

그런 다음 활동에 당신이 할 것 :

은보다 구체적으로, 당신은 AsyncTask를 확장하는 새로운 클래스가 필요합니다

ProgressDialog progress = new ProgressDialog(this); 
progress.setMessage("Loading..."); 
new MyTask(progress).execute(); 
+0

고마워 :) 당신의 대답이 효과가있었습니다. – Neha

+0

답변 주셔서 감사합니다. 저는 정확히 이것을하고 있지만, 전화가 가로 방향 일 때 progressDialog가 팝업되지만, 세로 방향 일 때는 나타나지 않습니다. 이것에 대한 아이디어가 있습니까? 첫 번째 클래스 (myTask를 호출하는 클래스)에서 대화 상자를 시작했지만 여전히 동일한 문제가 발생했습니다. 가끔 대화 상자가 세로 모드로 작동하지만 초점이 흐려 보이며 10 회 시도 할 때 한 번만 발생합니다. – Art

2

Android에서 장기 실행 프로세스를 시작하면 항상 다른 스레드에서 처리하는 것이 좋습니다. 그런 다음 UI 스레드를 사용하여 진행률 대화 상자를 표시 할 수 있습니다. 프로세스가 실행중인 동일한 (UI) 스레드에 진행률 대화 상자를 표시 할 수 없습니다.

장기 실행 프로세스

@Override 
public void run() { 
     //your code here 
} 
을 수행 할

public class SyncDataActivity extends Activity implements Runnable 

그리고 마지막 방법을 다음과 같이 Runnable를 구현해야합니다이 활동을 위해 프로세스

pd = ProgressDialog.show(this, "Synchronizing data", "Please wait..."); 
Thread t = new Thread(this); 
t.start(); 

를 시작하려면 다음을 수행

+0

스레드를 사용하는 경우 UI 스레드에서 작업 후 코드를 실행하는 등 다양한 작업을 관리해야합니다. –

+0

Matthew ... AsyncTask에서 Daemon을 true로 설정할 수 있습니까? – JAL

+0

안녕하세요, 여러분이 말씀 드린대로 시도했지만 여전히 작동하지 않습니다. 아래 코드를 게시하고 있습니다. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까? – Neha