2012-02-21 9 views
-1

私はここでやりたいことは、私がウェブサービスを呼びたいと思っていて、そのレスポンスに基づいて別のウェブサービスを呼び出すか、すでに別のスレッドにWebサービスを書いていますが、問題は私がワーカースレッドでアクティビティを呼び出すことです。 自分自身をもっと明確にするために、疑似コードを入れました。ワーカースレッドからアンドロイドアクティビティを開始しますか?これは良い練習ですか?

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:私は以前同じ質問をしていましたが、正確にそうしたいと伝えられなかったので、ワーカースレッド(私の質問の一部)のアクティビティを開始する代わりに、私は完全にあなたが活動を開始するが、それはあなたの擬似コードの「GOTO」の行にだと仮定している場所

おかげ

答えて

1

を理解することはできません「これは良い習慣です」にtは、どんな答えを受け取ります起動するアクティビティーごとに異なる値でmsg.whatを設定してから、handleMessage(Message)で起動することをお勧めします。

これは、ハンドラがUIスレッドで作成されていることを前提としています。そうでない場合は、両方のことをUIスレッドから行う必要があるため、ProgressDialogも却下しないでください。 UIスレッドで作成してそこに取得します。

+0

回答ありがとうございます。私のワーカースレッドからstartActivityを呼び出して別のactivity.Areにこれを行うには問題がありますか? – rogerstone

+1

正常に動作しますが、タスクスタックの問題を引き起こし、メモリリークを引き起こす可能性があるため、お勧めしません。 – Suman

関連する問題