2011-12-28 12 views
0

ここでは、私のアプリケーションのアップデートがユーザーのために利用可能であるというcheckupdate()の機能を持っているので、サーバーがリクエストを受けているときに2つのprogressdialogを表示する必要があり(プロセスのチェック中)、同期プロセスが進行中で、アプリケーションの負荷で実行されます。 ここでは2つの進捗ダイアログボックスを表示できません。ここでは最初のスレッドチェックの更新が実行され、アプリケーションが終了します。 貴重な回答を待っています。1つの関数で2つのスレッドを使用するには?

public void CheckUpdate() 
{ 

//----------------Process of checking the updates-------------------------- 

     try 
      { 
      progressDialog = ProgressDialog.show(this, "Wait", "Checking update...", false, true); 
      Thread thr1 = new Thread() 
      { 
       public void run() 
       { 
        int Flag = call.CheckUserUpdate(UsrId); 
        Update = Flag; 
        progressDialog.dismiss(); 
        //stop(); 
        interrupt(); 

       } 
      }; 
      thr1.start(); 
      } 
      catch(final Exception e) 
      { 

      } 
    //---------------Process of Synchronization----------------------------------------------   
      try 
      { 
      progressDialog1 = ProgressDialog.show(this, "Wait", "Synchronizing...", false, true); 
      Thread thr2 = new Thread() 
      { 
       public void run() 
       { 
        if(Update == 1) 
        { 
         SyncData(); 
         final int UpdateFlag = 1; 
         call.UpdateUserUpdate(UsrId, UpdateFlag); 
         progressDialog1.dismiss(); 
        } 
        else 
        { 
         progressDialog1.dismiss(); 
        } 
        progressDialog1.dismiss(); 
       } 
      }; 
      thr2.start(); 
      } 
      catch(final Exception e) 
      { 

      } 
} 

答えて

0

新しいスレッドを開始すると、別の場所から実行が開始されます。あなたのプログラムはここで2つのスレッドを開始し、main()の終わりに達して終了し、JVM/OSに新たに起動されたスレッドを強制終了させ、本当に遠くまで実行することはありません。

メインスレッドで何らかの作業が発生していないと仮定して、ワーカースレッドが自分のものにスレーブしている間、メインスレッドに制御をもたらすアイドルループ(または同様のもの)を追加する必要があります。

0

私はあなたが望むものを正しく理解していますか?

あなたのUIのactivitiyは、あなたがあなたのUI活動でhandlerを作成し、2を使用する必要がありますいずれか

  1. 更新チェック処理
  2. 同期プロセス

に基づいて更新されなければならない2つの進捗バーを持っています更新チェック用と同期チェック用の別々のスレッド

両方ともプログレ以下のようなメインスレッドへのsの情報:あなたはこのように見えるハンドラを持っているあなたのUIアクティビティで

mHandler.obtainMessage(Main_screen.MESSAGE_PGROGRESS_CHANGE_SYNCHRINIZATION, state, -1) 
    .sendToTarget(); 

を持っている他の中

mHandler.obtainMessage(Main_screen.MESSAGE_PGROGRESS_CHANGE_UPDATE, state, -1) 
    .sendToTarget(); 

...

private final Handler mHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     if (DEBUG) 
     Log.i(this.getClass().getSimpleName(), 
      "-> " 
       + Thread.currentThread().getStackTrace()[2] 
        .getMethodName()); 
     switch (msg.what) { 
     case MESSAGE_PGROGRESS_CHANGE_UPDATE: 
     if (DEBUG) 
      Log.i(this.getClass().getSimpleName(), 
       " MESSAGE_PGROGRESS_CHANGE_UPDATE: " + msg.arg1); 

     // do your update of progressbar or whatever here 
     break; 
      case MESSAGE_PGROGRESS_CHANGE_SYNCHRINIZATION: 
     if (DEBUG) 
      Log.i(this.getClass().getSimpleName(), 
       " MESSAGE_PGROGRESS_CHANGE_SYNCHRINIZATION: " + msg.arg1); 

     // do your update of progressbar or whatever here 
     break; 
関連する問題