Android 客户端使用线程与服务器通信的最佳实践
我正在构建一个Android应用程序,只要该应用程序正在运行,它就会定期与服务器进行通信。
我通过在应用程序启动时启动与服务器的连接来执行此操作,然后我有一个单独的用于接收消息,称为,它从中读取消息,分析它,并将其转发到应用程序的相应部分。thread
ReceiverThread
thread
socket
它在循环中运行,读取它必须读取的任何内容,然后在命令上阻塞,直到新数据到达,因此它花费了大部分时间被阻止。thread
read()
我处理通过另一个名为 .我想知道的是:我应该以类似的方式构建吗?意思是我应该为这个线程维护一个队列,让它发送队列中的所有消息,然后阻塞直到新消息进入队列,或者我应该在每次需要发送消息时启动线程的新实例,让它发送消息然后“死亡”?我倾向于第一种方法,但我不知道在性能(在内存中保留阻塞线程与初始化新线程)和代码正确性方面,实际上什么更好。SenderThread
SenderThread
另外,由于我的所有活动都需要能够发送和接收消息,因此我持有对类中两个线程的引用,这是一种可接受的方法,还是应该以不同的方式实现它?Application
我遇到的一个问题是,有时如果我关闭应用程序并再次运行它,我实际上有两个 ReceiverThread 实例,所以我会收到一些消息两次。
我猜这是因为我的应用程序实际上没有关闭,并且以前的线程仍然处于活动状态(在操作时被阻止),当我再次打开应用程序时,一个新线程被初始化,但两者都连接到服务器,因此服务器将消息发送给两者。关于如何解决这个问题,或者关于如何完全重新组织它以使其正确的任何提示?read()
我试图查找这些问题,但在我的第一个问题中发现了一些相互矛盾的例子,没有什么足够有用并适用于我的第二个问题......