Android中的通信(客户端/服务器)时屏幕暂停

时间:2011-07-26 04:14:30

标签: android client-server communication

我有一个应用程序,其中有谷歌地图,谷歌地图上的位置叠加以及一个单独的线程,每隔30秒就会将设备的当前位置发送到服务器。问题是当线程将位置发送到服务器时,设备屏幕停止,直到服务器响应。以下是代码

全球对象

private Handler handlerTimer = new Handler();

on onCreate Method

 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);
        }

    };

请告诉我我的代码有什么问题。

2 个答案:

答案 0 :(得分:1)

问题在于,虽然您正在生成新的线程,但您并未生成新的进程。你正在做的一切仍然在用户界面过程中,这就是阻塞。您可以找到有关on developer.android.com主题的更多信息。

解决此问题的最快捷,最简单的方法是使用IntentService类。它只允许一次执行一个HTTP请求,但会为您解决所有问题。

答案 1 :(得分:0)

尝试使用AsyncTask连接到服务器。请在此处查看示例:http://developer.android.com/reference/android/os/AsyncTask.html