天天看點

基于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。