2010-12-09 7 views
1

다음 코드를 사용하여 하위 작업을 시작하는 주 활동이 있습니다.Android : 진행 대화 상자가 표시되지 않음

Intent intent = new Intent(); 
intent.setClassName(MyChildActivity.class.getPackage().getName(), MyChildActivity.class.getName()); 
((Activity)context).startActivity(intent); 

자식 작업에서 시간이 많이 걸리는 작업을 수행하려고하는데 그렇게하는 동안 ProgressDialog를 표시하려고합니다. 내 코드는 다음과 같습니다.

private ProgressDialog _progressDialog; 

private OnClickListener btn_onClick = new OnClickListener() { 
    public void onClick(View v) { 
     _progressDialog = ProgressDialog.show(
      v.getContext(), 
      "Please wait", 
      "Performing task..." 
     ); 

     TaskThread t = new ExportThread(v.getContext()); 
     t.start(); 
    } 
}; 

private class TaskThread extends Thread{ 
    private Context _context; 

    public TaskThread(Context context) { 
     _context = context; 
    } 

    private Handler _handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      _progressDialog.dismiss(); 
     } 
    }; 


    @Override 
    public void run() { 
     performTask(_context); 
     _handler.sendEmptyMessage(0); 
    } 
} 

어떤 이유로 ProgressDialog가 표시되지 않습니다. 주 활동에서 동일한 코드를 사용하면 작동하지만 하위 활동에서는 그렇지 않습니다. 또한 다음 코드는 ProgressDialog를 표시하지 못합니다 (그러나 토스트는 표시됩니다).

private ProgressDialog _progressDialog; 

private OnClickListener _btn_onClick = new OnClickListener() { 
    public void onClick(View v) { 
     _progressDialog = ProgressDialog.show(
      v.getContext(), 
      "Please wait", 
      "Performing task..." 
     ); 

     try { 
      Thread.sleep(2000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     _progressDialog.dismiss(); 

     Toast.makeText(v.getContext(), "Done with progress dialog.", Toast.LENGTH_SHORT).show(); 
    } 
}; 

거기에 어떤 아이디어가 있습니까? 하위 작업의 ProgressDialog를 표시 할 수 있습니까?

고맙습니다.

답변

1

async task 대신 thread를 사용하는 이유는 무엇입니까?

비동기 작업은 쉽게 표시하고 업데이트 UI/진행 대화 할 수있게하는 방법 onProgressUpdatepublishProgress을 구현합니다. http://android-projects.de/2010/12/08/threading-in-android-apps-wir-entwickeln-einen-zahler/

+0

감사합니다, ArtWorkAD : 여기

몇 가지 예제 코드입니다. 왜 당신의 제안이 효과가 있었는지 모르지만 그랬습니다. Thread 접근법이 왜 AsyncTask 접근법이 작동하지 않는지 제게 설명해 주시겠습니까? 고맙습니다. – mahdaeng

+0

잘 작동하는 스레드입니까? UI에 액세스하고 업데이트하는 방법은 무엇입니까? 코드가 매우 복잡하고 기본 스레드 클래스를 사용하는 것을 볼 수 있듯이 응용 프로그램을 설정하고 실행하는 것은 어려운 작업입니다. 일반적으로 응용 프로그램에는 스레드가 많이 있습니다. 최대 40 개까지 가능합니다. 어떻게 구성해야합니까? 접근 방식을 사용하면 스레드를 관리하는 것이 거의 불가능합니다. async-task를 사용하려고하면, 많은 도움이됩니다! –

+0

스레드 접근 방식에서는 모든 코드가 올바르게 실행됩니다. 작업이 수행됩니다. 그러나 ProgressDialog가 나타나지 않습니다. AsyncTask 방식을 사용하면 ProgressDialog가 나타납니다. 그것이 내가 이해하지 못하는 부분입니다. – mahdaeng

관련 문제