解決androidpn推送機制服務器斷掉以後不能鏈接的問題

推送使用的是androidpn,當Server晚於Client啓動或者Client鏈接後,Server重啓,會出現Client沒法再鏈接的狀況。分析是由於Client的鏈接時,對隊列的管理有些問題,
 
private void addTask(Runnable runnable) {   
        Log.d("addTask(runnable)...");   
        taskTracker.increase();   
        synchronized (taskList) {   
            if (taskList.isEmpty() && !running) {   
                running = true;   
                futureTask = taskSubmitter.submit(runnable);   
                if (futureTask == null) {   
                    taskTracker.decrease();   
                }   
            } else {  
            runTask(); 
            taskList.add(runnable);   
            }   
        }   
        Log.d("addTask(runnable)... done");   
    }   
當鏈接不上服務器時候拋出異常,致使任務列表一直處於被添加而沒有執行,須要在esle裏面手動跑起鏈接線程。
若是當以前pn鏈接成功,服務器重啓,那麼須要在服務器斷開,捕捉到登陸失敗異常的時候
 } catch (XMPPException e) {
                  xmppManager.setConnection(null);
                    Log.e("LoginTask.run()... xmpp error");
                    Log.e("Failed to login to xmpp server. Caused by: " + e.getMessage());
                    e.printStackTrace();
                    String INVALID_CREDENTIALS_ERROR_CODE = "401";
                    String errorMessage = e.getMessage();
                    if (errorMessage != null && errorMessage.contains(INVALID_CREDENTIALS_ERROR_CODE)) {
                        xmppManager.reregisterAccount();
                        return;
                    }
                    xmppManager.startReconnectionThread();

                }  
執行
xmppManager.setConnection(null);將判斷是否已經鏈接服務器置空。這樣程序就會自動從新去鏈接服務器,成功創建新的會話。
相關文章
相關標籤/搜索