2012-07-30 15 views
0

我最近在Android 3.2上做了一个项目,将字符串发送到具有TCP连接的PC中的服务器。我不得不做一个线程来实现这一点,这在Java程序中我不需要做。我还使用了AsyncTask方法,但除了doInBackground函数之外,我无法使用其他函数发送信息,其中我创建了套接字连接。更好的方式来创建双向通信

要发送字符串,我在doInBackground函数中创建了一个循环,所以它一直在等待接收一条新消息,以便始终发送到计算机。这个问题是我不能做双向通信。在这个项目之后,我继续尝试发送除了doInBackground功能之外的其他功能的字符串。最后,我能够在Android 1.6上取得成功。

由于需要线程以及您需要在创建套接字连接的相同函数中发送消息,因此此方法无法用于高级版本的Android中,这是一种遗憾。

我想知道是否有更好的方式在更新版本的Android中执行双工操作。

回答

0

您可以在任何Android版本中使用Thread

正确的方法做你想做的,是创建一个Servicehttp://developer.android.com/reference/android/app/Service.html)和Service使用单独的Thread s到发送和收到的数据。

+0

感谢您的回答。 今天我正在研究服务和处理程序,我必须学习更多,并尝试做一个应用程序 This [link](http://stackoverflow.com/questions/5135438/example-android-bi-directional-network-socket -using-asynctask)显示了我用于我的应用程序的相同方法。对我来说,它只在android 1.6中作为双向工作,并且只有在循环中的客户端才在后端os中执行后台功能。 我只是好奇,为什么不在后面的os中工作,因为我在很多地方看过这个例子。但我会研究你告诉我的,看看有什么不同。 – Barscunes 2012-08-02 06:17:50

+0

那么,你刚刚发布的例子并没有打开连接。它在读取服务器发送的数据后会关闭。如果服务器没有发送任何东西,它几乎立即关闭,你也不能发送任何东西。你必须保持连接处于打开状态,并监听传入的数据,但是'AsyncTask'不是实现这个目的的方法,而是一个带有后台Thread的'Service'。 – 2012-08-02 07:10:40

+0

Mm基本上我所了解的是它在后台进程中使用的服务需要很长时间(因为在我的情况下,我不需要使用其他应用程序的服务),它与AsyncTask相反,它是用于小型后台进程。该服务没有线程,但可以在该线程中创建一个线程来创建tcp/ip连接。 我正在玩AsyncTask的例子,在清单中,我将minSdkVersion从10更改为8,它可以工作。 – Barscunes 2012-08-06 02:18:42