2012-06-27 95 views
0

我必須更新需要花費大量時間的不同服務器數據。我必須更新有關條件的數據。當我運行循環時,它會卡住設備一分鐘。我想通過處理程序做其他任何其他選項(我想不出來)。目前我在做的是:循環中的處理程序

for(int i=0;i>10;i++) 
{ 
if(i==0) 
handler.post(runable-1);//Different server data 
if(i==1) 
handler.post(runable-2);//different server data 
if(i==2) 
handler.post(runable-3);//different server data 
... 
} 

我該怎麼辦?此外,我必須向用戶顯示哪個可運行的數據正在加載數據... 請幫忙。謝謝

+4

你確定你的循環? 'for(int i = 0; i> 10; i ++)'......這是正確的嗎? –

回答

2

你可能想要的是AsyncTask。在你活動類添加

class UpdateServerTask extends AsyncTask<Void, Void, Void> { 
    private Object obj = null; 
    private ProgressDialog dlg; 

    @Override 
    protected voide onPreExecute() { 
     dlg = ProgressDialog.show (MyActivity.this, "", "Please wait, updating server...", true, false);  
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     for(int i=0; i<10; i++) { 
      switch(i) { 
       case 0: ...; 
         break; 
       case 1: ...; 
         break; 
       ... 
      } 
     } 
    } 

    protected void onPostExecute(Void result) { 

     dlg.dismiss(); 
    } 
} 

然後,當你需要做的更新:

new UpdateServerTask().execute(null); 

瞭解更多的關於AsyncTask

此外,請注意,您的for循環不正確,它應該是<10而不是>10。最後,我建議你使用switch而不是if-else if-else構造。

0

您應該使用服務實現這些服務器數據,而不是在活動上發佈任務。爲此做一個自定義的服務,你將有自由活動來做任何事情。