2011-05-30 62 views
0

你好我表示使用的AsycTask一個ProgressDialog但我上傳的進度,如果上傳速度是越來越棒移動採取了一些時間和我的應用程序顯示應用程序沒有響應的錯誤,即等待或強制關閉..bt其實我的工作是怎麼回事對,如果我選擇等待應用程序運行file..what應該怎樣做才能消除這種器件的應用不響應錯誤,或者我可以增加時間,直到使其能源部顯示得這麼快?進度對話框導致appication不響應錯誤?

doInBackground方法

. 
. 
. 
. 
. 
. 


    int i;   
        byte[] buf = new byte[512]; 

        while ((i = in.read(buf)) != -1) {     
         out.write(buf,0,i); 
         publishProgress(in.available()); 
         System.out.println(i); 
        } 

和int進步升級方法

protected void onProgressUpdate(Integer... values) { 
      // TODO Auto-generated method stub 
      super.onProgressUpdate(values); 
      if(a==0){ 
       progressDialog.show(); 
      } 
      a++; 
      int b=(int) (fil.length()-values[0]);   
      progressDialog.setProgress(b); 

     } 

回答

0

我認爲你所得到的ANR的原因是,你在UI做你的長期運行的任務線。如果你將阻塞的東西移動到另一個線程上並通知UI線程進程更新,你可能會發現ANR消失。道歉,如果你的長期運行的任務已經在背景(這是不可能從你的代碼告訴)

你可以嘗試使用的AsyncTask。這具有內置的通知機制併爲您管理線程。

+0

其在backgrond方法做 – Harinder 2011-05-30 11:24:36

+0

呀,對不起。我重新閱讀你的文章,現在對我來說更有意義。我可以建議在onProgressUpdate方法的開始和結尾添加日誌註釋以查看ANR發生時應用程序的位置。或者掛鉤調試器,看看ANR拋出時堆棧的樣子 – fleetway76 2011-05-30 11:35:25