2012-02-21 67 views
-1

我想在這裏做的是我想調用一個web服務,並基於它的響應我可能會調用另一個web服務或啓動一個activity.I是已經寫在一個單獨的線程的Web服務,但問題是,我打電話在工作線程中的活動, 爲了讓自己更清楚我已經把我的僞代碼從工作者線程開始android活動?這是一個很好的做法

if (User ID and Password present in the shared preference) THEN 
       Utils.checkauthorisation(API) //Web Service Call 
       if(respsonse is Paswordexpired) 
        erase password from DB 
        Goto (LOGIN SCREEN)//startActivity Call 
       else if(download of images hasnt happened today)) THEN 
         UTILS.DownloadImages//Web service call 
         if(response==connectivityorOtherError) 
          Toast respective Message 
          GOTO (GALLERY SCREEN)//startActivity Call 
         else if (response==confilicted Data) 
          Goto (CHANGES SCREEN)//startActivity Call 
         endif 
       endif 
endif 

我正打算顯示一個進度條,並做所有這些事件在這樣

progressDialog = ProgressDialog.show(this, "Loading", 
       "Authenticating Please wait."); 

    new Thread() { 
     public void run() { 

     ///execute the pseudo code 

        startActivity(intent); //Is this a good practice 

     Message msg = Message.obtain(); 
     msg.what = 1; 
     messagHandler.sendMessage(msg); 
     } 

    }.start(); 



      private static Handler messagHandler = new Handler() { 
    public void handleMessage(Message message) { 
     super.handleMessage(message); 
     switch (message.what) { 
     case 1: 
      progressDialog.dismiss(); 
      break; 
     default: 
      break; 
     } 
    } 

}; 

但是,這擾亂了我的東西線程是我必須開始在輔助線程活動在這裏。 這是一個很好的做法嗎?我最初認爲我們只能從UI線程開始一個活動。這裏後端發生的過程是什麼(線程意義上的)?如果這不是一個好的做法,那麼實現我的僞代碼的其他選擇是什麼?

PS:抱歉再次問這個問題。我早些時候問過同樣的問題,但沒有完全傳達我想要的東西,所以收到了工人線程(我的問題的一部分)開始活動的替代方案,但沒有得到答案,牛逼收到任何答案的「這是一個很好的做法」

感謝

回答

1

我不能完全理解你在哪裏開始的活動,但假設它是在你的僞代碼的「GOTO」行,我建議您爲每個想要啓動的活動設置不同的值,然後在handleMessage(Message)上啓動它。

這是假定處理程序是在UI線程中創建的。如果不是,則不應該忽略ProgressDialog,因爲這兩件事都應該從UI線程完成。在UI線程上創建一個並在那裏。

+0

感謝您的回答。但懷疑是我能夠從我的工作線程調用startActivity並轉到另一個活動。是否有任何問題要做? – rogerstone 2012-02-21 06:16:37

+1

它工作正常,但不推薦,因爲它可能導致任務堆棧問題,並可能導致內存泄漏。 – Suman 2012-02-21 07:12:08

相關問題