2

이 질문은 이전에 질문되었지만, 필자가 찾은 답변은 필자의 경우 유용하지 않습니다.다른 활동이로드되는 동안 ProgressDialog 표시

사용자가 작업 1에서 단추를 누르면 작업 2가 열립니다. 활동 2는 SharedPreferences에 저장된 일부 데이터를로드해야합니다. 액티비티 2는 onCreate()에서 상당히 많은 작업을 수행해야하기 때문에 여는 데는 시간이 걸립니다 (특히 느린 장치에서는). 필자가 본 다른 사례와 달리 활동은 인터넷에서 데이터를 다운로드 할 필요가 없기 때문에 AsyncTask를 사용하는 것은 나를위한 선택 사항이 아닙니다. 왜냐하면 활동을 여는 데 오랜 시간이 걸리는 이유는 인터넷이 아니기 때문입니다. 그 이유는 5 개의 listviews를로드해야하고 데이터를 올바르게 처리하기 위해 많은 계산을 수행해야하기 때문입니다.

그래서이 경우 Activity 2가로드되는 동안 ProgressDialog를 어떻게 표시합니까?

+3

을 확장합니다. 귀하의 케이스는 인터넷에서로드하는 것과 완전히 동일합니다. 진행률 표시 줄을 앞에서 업데이트하면서 백그라운드 처리를 수행하려면 AsyncTask가 필요합니다. – Raanan

답변

4

그래서이 경우에 Activity2 이로드되는 동안 ProgressDialog를 표시 하시겠습니까? 당신이 ProgressDialog을 보여 경우에도 그 물건을 할 투쟁 것이다 Activity로 메인 UI 스레드를 차단하는 것 같이 단순히 동결 때문에

는 우려해서는 안됩니다. 작업을 나타 내기 위해 ProgressBar을 포함

  • 초기 레이아웃을 만들 : 당신은 레이아웃 생성/데이터 구축을 알고있는 (또는 당신이 onCreate() 방법에 무엇 이건) 경우, 사용자에 의해 발견 될 것입니다 시간이 좀 걸릴 것입니다 스레드는 레이아웃이 초기 ProgressBar

이 w를 교체 구축의 작업을 할 때 스레드를 시작

  • 사용자
  • 로 수행되고/AsyncTask를이 무거운 종료 onCreate()
  • 을 할 수 귀하의 활동은 작업 /로드 표시기로 시작하여 사용 가능할 때 레이아웃을 작성합니다. 어쩌면 당신은 또한 물질을 향상시킬 수 있습니다 (5 ListViews 조금 이상하게 보입니다).

  • +0

    네, Activity 2는 각각 Listview를 포함하는 5 개의 조각을 포함하는 ViewPager입니다. 따라서 로딩 시간이 꽤 오래 걸릴 수 있습니다. – Xander

    +0

    @Merlin이 경우 5 개의 Listviews에 대한 주석을 무시합니다. 하지만 5 개의 조각이있는'ViewPager' (3 중 어떤 것이 든 ('setOffscreenPageLimit()'을 엉망으로 만들지 않는다면)는 여러분이 필요로 할 정도로 느리게 시작하지 않아야합니다 진행률 표시기. – Luksprog

    +0

    음, HTC One X에서 2 ~ 3 초 걸립니다. – Xander

    0

    공용 클래스 TestActivity는 대답은 기본적으로 당신이 잘못이다 활동 {

    ProgressDialog progressDialog; 
    
    private Context context; 
    
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.test); 
        context = this; 
    
        showProgress("Data loading..."); 
    
        new Thread() { 
         public void run() { 
    
          try { 
    
           boolean sucess = loadData(); 
           if (sucess) { 
            Message alertMessage = new Message(); 
            alertMessage.what = 1; 
            handle.sendMessage(alertMessage); 
           } else { 
            Message alertMessage = new Message(); 
            alertMessage.what = 2; 
            handle.sendMessage(alertMessage); 
           } 
    
          } catch (Exception e) { 
           // TODO: handle exception 
          } 
    
         } 
        }.start(); 
    
    } 
    
    private boolean loadData() { 
    
        // load data here 
        return true; 
    } 
    
    private void showProgress(String msg) { 
        progressDialog = ProgressDialog 
          .show(TestActivity.this, null, msg, true); 
    } 
    
    private void hideProgress() { 
        if (progressDialog != null) 
         progressDialog.dismiss(); 
    } 
    
    Handler handle = new Handler() { 
    
        public void handleMessage(android.os.Message msg) { 
         hideProgress(); 
         if (msg.what == 1) { 
          Toast.makeText(context, "Data Loaded Sucessfully", 
            Toast.LENGTH_SHORT).show(); 
    
         } else if (msg.what == 2) { 
          Toast.makeText(context, "Data Loading failed ", 
            Toast.LENGTH_SHORT).show(); 
         } 
    
         super.handleMessage(msg); 
        }; 
    }; 
    

    }