2012-01-20 129 views
-1

我知道你不应该包括在Android应用程序的UI线程慢作用的代码,但我真的不知道什么是缓慢的,什么是快。Android的TCP客户端和UI线程

我的申请材料到外部服务器的永久TCP客户端连接。到目前为止,我还没有做出任何认真的努力来配置其相关的代码在辅助线程上运行,并且它似乎运行良好。

没有任何人有强烈的感情的一种方式或其他有关如何在Android应用程序应该与用户和外部TCP服务器同时进行交互?

感谢,在网络上 R.

+0

由于没有在单独的线程中运行与网络相关的代码,因此您正在寻求麻烦。这一切都归结为这样的情况:您**可以与您的应用_freezing_(从用户的角度来看)和Occassional _force关闭,因为网络已饱和或通信时间过长?如果您现在无法为此付出努力,请考虑稍后会在支持请求/低收视率等方面显示这一点。再次您所需要的所有设计决定都将不得不忍受。 –

+0

这是一个很好的观点。我只是没有看到这种行为。哦,我看到了问题,关注你,只是不冻结或强制关闭......另外,当我将TCP客户端代码转换为独立线程运行(第一稿,我承认)时,它完全停止了工作..你能指点我一个Android的示例TCP客户端? – Rich

+0

研究将您的网络代码移动到“AsyncTask”中。这很容易实现,并且在SO上有很多例子。我也自己回答了很多AsyncTask问题,所以欢迎您也参与其中。这里有一个[无痛线程](http://developer.android.com/resources/articles/painless-threading.html)来自Android的文章,供您参考。试试看,如果遇到问题,请开始一个新问题,如果您没有及时回复,请给我打电话。祝你好运! –

回答

0

在Android中(或其他平台)主线程是UI线程。这是因为用户在使用应用程序时总是期望得到良好的响应。如果您将此线程与任何耗时的任务重叠,它将显示给用户该应用程序已冻结。这违反了所有的设计准则,您应该开始将您的网络连接与主线程分开。

+0

哇。三个基本相同的答案... 我卖了,我只是没有找到一种方法来使它工作。有没有人在Android的一些示例TCP客户端代码上领先? – Rich

0

任何绝对应该是在后台线程。

逸岸的Android开发团队感觉如此强烈,这样的话,在蜂窝开始,如果您尝试访问网络的主线程抛出一个异常上。

速度和网络连接的可靠性是在你的控制,通过使UI线程处理,你也把你的应用程序的速度/可靠性/响应你无法控制的网络。虽然它并不总是会导致糟糕的用户体验,但它有时会。而有时候这些足以让IMO不让它发生。

+0

哇。三个基本相同的答案... 我卖了,我只是没有找到一种方法来使其工作。有没有人在Android的一些示例TCP客户端代码上领先? – Rich

+1

在这个问题上的答案有一个很好的例子,它已经被放入了一个AsyncTask。 http://stackoverflow.com/questions/5855775/android-tcp-client此页面还包含另一个很好的例子http://kikudjiro.posterous.com/android-tcp-client-example,你可以下载 – FoamyGuy

0

它根本不会工作。从主线程的Android 3.0网络操作是强制严格模式违规,它只会抛出和异常..现在更好地了解asynctasks和装载机。

+0

哇。三个基本相同的答案... 我卖了,我只是没有找到一种方法来使其工作。有没有人在Android的一些示例TCP客户端代码上领先? – Rich

+0

这些无处不在..但尝试http://android-developers.blogspot.com/2011/09/androids-http-clients.html一开始,并阅读有关AsyncTask和加载程序,就像我已经提到的。 –