2011-07-26 10 views
1

私は、Googleマップに位置情報オーバーレイがあり、30秒ごとにデバイスの現在位置をサーバーに送信する別のスレッドがあるアプリケーションを持っています。問題は、スレッドがサーバーに場所を送信するときに、サーバーの応答が停止するまでデバイスの画面が停止することです。ここでは、次のコード、Androidでの通信中の画面停止(クライアント/サーバ)

グローバルオブジェクト

private Handler handlerTimer = new Handler(); 
のonCreateメソッドで

handlerTimer.removeCallbacks(taskUpdateStuffOnDialog); 
handlerTimer.postDelayed(taskUpdateStuffOnDialog , 100); 

そして、ここではtaskUpdateStuffOnDialog

private Runnable taskUpdateStuffOnDialog = new Runnable() 
    {   
     public void run() 
     { 
     try 
     { 
     URL url3 = new URL("http://"+ appState.getURL()+"//iLocator/IDForClient.php?reg_no="+ Device_ID[0]); 
     HttpURLConnection conn = (HttpURLConnection) url3.openConnection(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     String quote = reader.readLine(); 
     while (quote != null) 
     { 
      Device_ID = quote.split("\n"); 
      quote = reader.readLine(); 
      bCheckID = true; 
     }//End While 

     positionOverlay.setID(Device_ID[0]); 
     addEvent(Device_ID[0]); 

    }//End try 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
     Toast.makeText(MainMapActivity.this, "Communication Issue",Toast.LENGTH_LONG).show();  
    }//End catch 
handlerTimer.postDelayed(this, 9000); 
     } 

    }; 

です私のコードが間違っているものを私に教えてください。

+0

サーバーに場所を送信するために別のスレッドを実際に生成していないかのように聞こえます。おそらくメインのUIスレッドを何らかの形でブロックしている可能性があります。あなたが投稿したコードから何が起きているのかは分かりません。 – dbryson

+0

@Dbryson、私は私の質問を編集しました、今それを確認してください。 – Siddiqui

+0

下記の投稿を参照してください。希望が役立つ – dbryson

答えて

1

新しいスレッドを作成しても、新しいプロセスが生成されないという問題があります。あなたがやっていることはすべて、まだユーザーインターフェイスのプロセスにあり、それはブロックされています。詳細は、on developer.android.comトピックを参照してください。

これを回避する最も簡単で簡単な方法は、IntentServiceクラスを使用することです。一度に1つのHTTPリクエストしか実行できませんが、すべての問題が処理されます。

関連する問題