安卓套接字和异步任务

3
我即将开始制作一款用作TCP聊天客户端的应用程序,我一直在阅读相关资料,最终得出的结论是最好(如果不是必须)将我的socket和reader放在asynctask中。然而,由于我是Android新手,所以这对我来说是一项巨大的任务,但我至少已经了解到以下基本步骤:
1. 在主类中实例化视图,并创建一个将EditText中的文本发送到异步类的方法。 2. 创建异步类,包括socket和连接,在此处放置reader和writer,writer将是接收字符串参数并通过socket发送的方法。 3. 让reader始终监听服务器套接字,并使用发送出的字符串更新textview。
这个“计划”是否足够良好?有什么缺陷或遗漏的吗?在开始之前,我想问一个问题,即异步任务,我需要创建它吗?据我所知,我不需要返回任何内容,也不需要进行任何进度更新。我的客户机地址将是硬编码的,因此我猜这是唯一需要传递给异步类的参数?
非常抱歉如果这些问题很基础,但我刚刚开始学习,希望不要犯错。
1个回答

7
你只想在小型(相对较小)和直接的操作中使用AsyncTask,比如下载特定项目(例如图像或mp3)。听起来你需要的是一个Service。该服务将在应用程序的后台运行,你可以通过服务处理网络操作。
对于其他有用的文档和帮助,以及如何确定服务是否适合您,请查看此处
编辑:
要了解如何在自己的线程中创建服务的更多信息,请参考此处
编辑2:
尝试将其视为反Activity。它做了所有活动不应该做的事情,主要是处理。任何重度处理都应在线程化服务中完成,原因有很多,主要是为了多任务处理和将处理从主UI线程中移除。为了演示这一点,请考虑Pandora。Pandora创建一个服务(在自己的线程中),连接到其网站并流式传输音乐。服务具有生命周期,允许其在活动被杀死时继续运行。这使得用户可以在执行其他任务时进行音乐流式传输。但是当用户想查看正在播放的内容时,她只需要点击应用程序。从那里,活动将检查服务,查看它是否有一些数据,并基于服务中的数据构建其内容。
希望这可以帮助您。我真的想不出更好的方式来表述它...

但据我了解,一个服务并不在自己的线程中运行,这对于需要在服务器套接字上持续监听的套接字来说是首选或必需的吗? - Gvs
你可以在自己的线程中创建服务。只需创建一个实例线程,然后在其中创建服务即可。 - ahodder
很抱歉,但我没有看到这项服务的优势在哪里?它是因为它给了我开始和结束命令,还是我错过了这项服务的主要优点? - Gvs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接