2012-04-23 108 views
0

我有一個加載xml文件的活動,但是當應用程序在1秒或2秒內沒有回覆的情況下被調用時,我不知道是否可以進行某種加載而不會出現應用程序崩潰,謝謝。加載狀態或異步任務

+1

如果你有事情,用戶可以在屏幕上,然後做一個異步任務會更有意義(與屏幕例如右上方一個進度條控件)進行交互,但如果沒有什麼用戶可以互動,然後有一個負載屏幕更有意義。 – Raunak 2012-04-23 21:34:33

+0

好的,我怎麼做這個加載屏幕? – user1265628 2012-04-24 00:21:53

回答

1

經驗法則是,如果你做什麼,請使用AsyncTask,否則你的應用程序將最終崩潰在長網絡延遲或大文件。

private class doSomethingTask extends AsyncTask<SomeData,Integer,SomeData[]> { 

    private ProgressDialog dialog; 

    protected SomeData[] doInBackground(SomeData... values) { 
     int count = values.length; 
     for(int i=0; i<count; i++) { 
      publishProgress(count,i+1); 

      // do something here 
      .... 
      // 

      if(isCancelled()) return null; 
     } 
     return values; 
    } 

    protected void onPreExecute() 
    { 
     // show progress bar or something 
     dialog = new ProgressDialog(context); 
     dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     dialog.setMessage(context.getString(R.string.downloading)); 
     dialog.show(); 
    } 

    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     dialog.setMax(values[0]); 
     dialog.setProgress(values[1]); 
    } 

    protected void onPostExecute(SomeData[] result) { 
     // kill progress bar here 
     if(this.dialog.isShowing()) { 
      this.dialog.dismiss(); 
     } 
    } 
} 
+0

好的,但我想調用活動,它是開放的,並保持listview組件加載,直到數據加載,以及Facebook應用程序,例如。 – user1265628 2012-04-24 01:54:46

+0

這沒問題,'class doSomethingTask'放在你的'Activity'裏面,所以你可以顯示列表,並且列表上會出現一個'ProgressBar',告訴你的用戶正在發生什麼。 – lenik 2012-04-24 02:03:02