在Android中进行通信(客户端/服务器)时屏幕暂停
我有一个应用程序,其中有谷歌地图,谷歌地图上的位置覆盖和一个单独的线程,每30秒将设备的当前位置发送到服务器。问题是,当线程将位置发送到服务器时,设备的屏幕会暂停,直到服务器响应。这是下面的代码 全局对象在Android中进行通信(客户端/服务器)时屏幕暂停,android,client-server,communication,Android,Client Server,Communication,我有一个应用程序,其中有谷歌地图,谷歌地图上的位置覆盖和一个单独的线程,每30秒将设备的当前位置发送到服务器。问题是,当线程将位置发送到服务器时,设备的屏幕会暂停,直到服务器响应。这是下面的代码 全局对象 private Handler handlerTimer = new Handler(); 在onCreate方法中 handlerTimer.removeCallbacks(taskUpdateStuffOnDialog ); handlerTimer.postDelayed(task
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);
}
};
请告诉我我的代码有什么问题。问题是,尽管生成了一个新线程,但没有生成新进程。您所做的一切仍在用户界面过程中,这就是阻塞。您可以找到有关该主题的更多信息
解决这个问题最快捷最简单的方法是使用类。它一次只允许执行一个HTTP请求,但会为您解决所有问题。问题在于,尽管您正在生成一个新线程,但您没有生成一个新进程。您所做的一切仍在用户界面过程中,这就是阻塞。您可以找到有关该主题的更多信息
解决这个问题最快捷最简单的方法是使用类。它一次只允许执行一个HTTP请求,但会为您解决所有问题。尝试使用AsyncTask连接到服务器。请参见此处的示例:尝试使用AsyncTask连接到服务器。请参见此处的示例:我觉得您并没有真正生成一个单独的线程来将位置发送到服务器。最有可能的是,您以某种方式阻塞了主UI线程。从你发布的代码中,我真的看不出发生了什么。@Dbryson,我已经编辑了我的问题,请现在查看。请参阅下面的我的帖子。希望helpsIt对我来说听起来好像你没有真正产生一个单独的线程来将位置发送到服务器。最有可能的是,您以某种方式阻塞了主UI线程。从你发布的代码中,我真的看不出发生了什么。@Dbryson,我已经编辑了我的问题,请现在查看。请参阅下面的我的帖子。希望有帮助