【发布时间】:2014-03-13 04:12:16
【问题描述】:
我目前正在开发一个与其他设备通信的 android 应用程序,它就像一个服务器。基本上要构建应用程序的视图,我首先必须通过 TCP 连接向服务器发送查询以获取信息。我(成功)在异步任务的帮助下执行了这些查询:
private class TCPQuery extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
//connect the socket send the query and receive feedback
}
@Override
protected void onPostExecute(String result) {
//parse server feedback and build the view
}
}
这种方法适用于在应用程序生命周期内仅进行几次的单个查询。我在实施时遇到的问题如下: 应用程序中的某个视图,包含搜索栏。所以基本上,seekbar 值的每次变化(每次 onProgressChange 方法触发)都必须发送到服务器(这次没有反馈),因此它可以跟踪实际值。
您将如何实施?当然,在主线程上可能不做android中的联网。但是这里每次值变化时建立连接、发送消息并关闭连接是不行的。仅将条形滑动一点点就会在瞬间产生十几个这样的调用。
我尝试通过实现服务来解决这个问题。该服务有自己的套接字来与服务器通信。我会将套接字连接到服务器并使其保持打开状态,这样我就可以在搜索栏发生更改时调用服务的发送方法。但这似乎干扰了我之前提到的其他查询(使用异步任务执行的查询)。当另一个处于活动状态时,我无法连接。现在我不确定我的服务实现是否很糟糕,或者我是否在这里误解了一个关键的网络概念。
我曾想过只在StopTrackingTouch 上发送数据,但这并不是我真正想要的。任何帮助将不胜感激!
【问题讨论】:
标签: android sockets service tcp seekbar