標籤:androidpn apnbb 推送 android推送
最近在做推送,採用的架構是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。
基於androidpn用戶端修改的APNBB