Androidpn客户端浅析
来源:互联网 发布:android放弃java 编辑:程序博客网 时间:2024/04/30 14:14
开发部署方法:
1. 下载androidpn的客户端和服务器:地址为:http://sourceforge.net/projects/androidpn/files/
2. 解压服务器端,点击运行,访问:http://127.0.0.1:7070/user.do,就可以看服务器端的管理页面,用这个管理页面,就要向客户端push消息。
3. 把客户端导入到eclipse工程中,修改raw/androidpn.properties文件中的xmppHost的值,如果在模拟器上访问就设置为10.0.2.2(详情请见:http://blog.csdn.net/android_tutor/article/details/4996752),如果是在手机上访问就设置为服务器的ip就行。
讲讲androidpn客户端的写法:
先从最关健的后台Service开始请起:
从类的层次看这个结构比较简单,让其变得复杂的是,其里面有三个线程:主线程,进行Xmpp通信线程,连接出错重试线程。
对上图进行说明:
1. 在NotificationService里创建一个单线程,让其对服务器进行连接,由于使用Xmpp连接服务器要分为三步:连接,注册,登陆。所以用一个栈来保存要执行的Task任务(ConnectTask,RegisterTask,LoginTask),还后再按这个顺序进行执行。
2. 连接Xmpp服务器的线程用的是Executors.newSingleThreadExecutor(),这个本身可以不停的submit任务,那为什么还要自己用一个栈来保存Task了,我的猜测是虽然可以不停的提交任务,但其执行顺序不能保证,哈哈,这个推测可能是错的。
3. 连接线程在连接,注册,登陆的过程中,都有可能出错,都可能会失败,这时我就要有一个重连的机制,在Androidpn里开了另外一个线程来进行重试,其重试不是每次都按多少秒来进行重试,而是有其自己的规则。
- private int waiting() {
- // 重试次数大于20次,其睡眠600秒
- if (waiting > 20) {
- return 600;
- }
- // 重试次数大于13次,睡眠300秒
- if (waiting > 13) {
- return 300;
- }
- // 重试次数小于等于7次,睡眠10秒,大于7次,睡眠60秒
- return waiting <= 7 ?10 : 60;
- }
4. 在LoginTask里,如果登陆了服务器端,其就会注册一个监听器,用于监听服务器push的数据包(Packet),再通过发送广播的方式来通知要进行显示的程序。
5. 在登陆服务器后,也有可能出错,所以在登陆后,会设置一个ConnectionListener,用于监听连接出错的时候,再合适重连线程,进行重连
6. 在登陆过程中,有一种错误要单独处理,就是账号和密码无效的时候,这个时候其返回的状态码是401,这种情况应该把本地保存的帐号和密码都清掉,再重新进行连接,不然会永远都登陆不上服务器端。
其以上的线程写法不一定是最好的,我们也可以用Hander来进行重试,或者用TimeTask来管理线程也可以。
- Androidpn客户端浅析
- Androidpn的框架浅析
- Androidpn的框架浅析
- Androidpn的框架浅析
- androidpn客户端深析
- Androidpn客户端的整合
- Androidpn客户端调试
- [androidpn客户端] androidpn-client 常见BUG解决方法
- AndroidPN客户端源码简要分析
- Androidpn客户端和服务器的研究
- androidpn学习笔记.与客户端的通信
- AndroidPn学习:服务器如何接收客户端数据
- AndroidPN服务器与客户端代码分析
- Androidpn学习笔记-客户端代码分析
- 基于androidpn客户端修改的AndroidPNClient
- AndroidPN服务器与客户端代码分析
- AndroidPN客户端的简单集成手机应用
- 基于androidpn客户端修改的AndroidPNClient
- 测试视频网站
- 使用Database Link遇到ORA-01017,ORA-02063
- 堆和栈的区别
- 黑马程序员 01 Java基础教学 - 01 - 认识Java
- (累积3万错误--NO.1)jQueryUI中dialog设置属性为JSON对象,在IE6,7,8中的设置
- Androidpn客户端浅析
- PHPCMS 2008 SP3 模板语法规则整理
- map用法
- 中国电信商务领航:网关(2-1)端口映射
- WTL入门(1)-- ATL背景知识 (转)
- 小方法
- 海淘汇总
- 进程状态
- 为什么android编程要将界面分开用xml来写?