1.9Android 学习+进度之九-消息队列及其相关

来源:互联网 发布:淘宝里的表情 编辑:程序博客网 时间:2024/06/07 04:41

细细思考了下,设想这么个场景,此时ABC都登录了服务器S,此时B、C都给A发消息,然后多线程接收到以后。都要给A转发,此时是B、C的接收线程。假如发现这个消息是转发给A的,那么都会去调用A这个对象(因为共享了client——list),假如两个线程同时找到这个list中A,然后因为多线程的机制,互相调用A的发送数据对象,那就糟糕了。

所以,这里设想的是,每个client得有一个可被多线程操作的消息队列。然后每次A发消息都是给A的队列里塞消息。而A的发送,得放到某个线程里面,这样应该是安全的。看到一个毕设,

假如每个对象太复杂,那就搞一个对象来集中处理给client发送的信息(本质都是,让单线程去处理发送数据,防止socket被多个线程同时使用)。

所以不管怎么样,都得有一个消息队列。

这里分享个链接,http://blog.csdn.net/madun/article/details/20313269,这里讲得挺好的,我也打算用里面的办法去实习。再分享个链接http://blog.csdn.net/luohuacanyue/article/details/16359777;这个主要是应用的。生产者和消费者,应该是某种成熟的设计方式吧。感觉这个设计方式不错

首先新建一个类,这个类包含对象和各种client,然后开个线程循环判断队列里是否有数据,有就处理,没有就等着。

试试,先把原来的部分代码移植过去,看看是否影响整体。

再删除了其他地方的writer的使用之后,完成了这个事情。注意点是,在传递传输的时候,必须要确定,传递的参数都已经初始化了,否则,到时候报,noPoint的问题,都不知道是谁。。其次,全部移植后,完成这一章的内容吧。

总算把该做的做了。现在的效果是,使用了消息机制,处理代码架构和第二个链接是类似的。

目前可以,一个用户登录,另一个用户登录,两者的列表,都会有更新,当其中一个用户下线的时候,另一方也能马上获得该用户下线的消息,并且从列表中删除。