基于androidpn客户端修改的APNBB

最近在做推送,采用的框架是androidpn,但对于客户端实在是修改得受不了了,特别是重连和连接那一块,有些BUG的修改实在是难以下手,比如在重连那里,原来的写法是在死循环中不断调用 xmppManager的连接登录,这样,就算是重连成功,依然会每20秒加入重连的任务(连接、注册、登录),然后不断地去执行。显示这对CPU等非常浪费。另外,我还要加入接口,让使用它的客户端能够获取当前的状态,如断开、正在连接或已登录。又不想把xmppManager对象直接给暴露出来同时把里面的相关方法都一个个修改为public的。

考虑到这些原因,最后决定重写其中的连接机制。

重写之后,因为与原来的项目差异太大,不好与fork的项目再做合并,就在github上另外建了一个项目。

重写的内容包括:

1、基于原来的已经改了若干个BUG的版本进行修改,所以这个版本基本上能修复网上多数人提到的那些BUG。

2、把重连的流程改为基于广播机制。因为是应用内广播,而且不能与其他应用的广播相冲突,所以对于与这个流程相关的广播,都采用了LocalBroadcastManager。

3、不采用原来的线程池,因为是单线程来执行连接、注册和登录这些task(实现Runnable接口的类),所以用了一个handler。然后,后面会把连接、注册、登录写在同一个task里,而只是分为三个方法(我似乎陷入了作者的误区,这三个过程本来就不是并行的,它是线性的,要一个接一个的,而且是相关的,为什么要写成三个Runnable然后在结束后去通知其他runnable执行呢?)。

目前改写后,已有一版是可以使用的,托管于github上:https://github.com/msdx/APNBB。

由于现在有其他项目在忙,这个项目暂时不再做改动。

未来计划有:

1、清理代码(重改为基于广播机制,只是改写了重连的那一部分,其他地方还有一些要改的。而且要清理掉已经不再用的一些方法变量)。

2、连接、注册、登录不再分为三个runnable对象。

3、避免锁屏时线程挂起的方法,由申请电源锁改为使用AlarmManager。

时间: 2024-10-07 14:46:36

基于androidpn客户端修改的APNBB的相关文章

可动态增减的线程池,主线程accept——基于UNP代码修改

可动态增减的线程池,主线程accept——基于UNP代码修改 1.说明 线程池基于一个区间动态变化,在客户连接过多线程不够用时,动态增加一定数量的线程.在线程闲置数量多于一半时,动态减小线程数量到一个基准线. 这个例子模式为:半同步/半异步(half-sync/half-async) 2.代码相关说明 代码基于UNP的库函数,要想运行必须先安装相应库. 3.代码 #include "unpthread.h" #include <queue> #include <lis

nfs nobody,nobody 需要在nfs客户端修改从nfs服务器端共享过来的目录怎么办?

1,加入我们使用nfs共享安装oracle, 安装oracle需要修改base,data,orainventory等等目录及自目录的属主及权限,一般会继承nfs客户端目录的权限及属主 groupadd oinstallgroupadd dbauseradd -m -g oinstall -G dba oracle chown -R oracle:oinstall $1chown -R oracle:oinstall $2#chown -R oracle:oinstall $3chmod -R 7

解决SVN客户端修改log message失败的问题

在使用SVN版本控制的时候,在每一个版本都会写一些日志,介绍新版本更新完成的内容.然而安装的SVN版本控制器默认是一旦提交不允许修改日志的.但在提交版本更新时,有些功能确实是忘记写在日记中了,需要修改提交的Log日志.如果需要获取修改权限,则必须设置一个pre-revprop-change钩子.默认的钩子模板使用的是linux下的脚本语言,不能在Windows下运行.所以我们必须重写,这里介绍用批处理文件来写钩子脚本的方法.最简 单的允许修改日志的pre-revprop-change.bat连一

使用SEP禁止客户端修改IP地址 - 飞舞的菜刀 - 51CTO技术博客

1.首先从注册表中搜寻 IP地址所在的位置,查到几项,此项即可: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces 2.打开[应用程序与设备控制]界面,单击[添加],新建一个策略,填写相应的"名称":如下图 2.点击[应用程序控制],[添加],输入规则集名字.在[将此规则应用于下列进程]右边单击[添加] 输入"*",在[请勿将此规则应用于下列程序],添加输

基于DateTime Picker修改成类似旅游网站出发日期选择的功能

原版说明文档:http://www.bootcss.com/p/bootstrap-datetimepicker/ 修改后可支持多日期选择和控制可选日期,这样就能在后台设置哪些日期可选,前台展示时可以控制只能选择可选日期 后台页面效果: 前台页面效果 源码下载:点击下载

wechat客户端修改

1. src/ui/adapter/FriendCardAdapter.java @Override     public View getView(int position, View convertView, ViewGroup arg2) {        CellHolder cell = null;        if (convertView == null) {            cell = new CellHolder();            convertView =

mybatis - 基于拦截器修改执行中的SQL语句

拦截器介绍 mybatis提供了@Intercepts注解允许开发者对mybatis的执行器Executor进行拦截. Executor接口方法主要有update.query.commit.rollback等等. 主要思路为: 进入拦截器方法中 获取拦截器方法参数 获取解析参数及SQL 自定义生成自己的SQL语句 将自定义SQL设置进参数中 由mybatis处理后续问题 拦截器代码 import org.apache.ibatis.cache.CacheKey; import org.apach

Oracle用户lock,忘记密码,用客户端PL/SQL进行修改

网上很多修改的方法了,现在分享一个用PL/SQL客户端修改的方法,毕竟我们小白都爱点点. 登录高权限的用户system等.如图,找到User下,需要修改的用户. 右键需要修改的用户,选择"Edit". PL/SQL的右边出现下图,在1的位置填写新密码(修改密码),2位置去掉Acount locked的勾选(接触锁定),3位置点击apply运行一下.成功! 原文地址:https://www.cnblogs.com/daguozb/p/9901020.html

Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送

Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送,写这个系列真的很要命,你要去把他们的API文档大致的翻阅一遍,而且各种功能都实现一遍,解决各种bug各种坑,不得不说,极光推送真坑,大家使用还是要慎重,我们看一下极光推送的官网 https://www.jpush.cn/common/ 推送比较使用,很多软件有需要,所以在这个点拿出来多讲讲,我们本节