私は、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);
}
};
です私のコードが間違っているものを私に教えてください。
サーバーに場所を送信するために別のスレッドを実際に生成していないかのように聞こえます。おそらくメインのUIスレッドを何らかの形でブロックしている可能性があります。あなたが投稿したコードから何が起きているのかは分かりません。 – dbryson
@Dbryson、私は私の質問を編集しました、今それを確認してください。 – Siddiqui
下記の投稿を参照してください。希望が役立つ – dbryson