2010年5月19日 星期三

【分享】- Android 程式中 session 建立之 Session.getDefaultInstance 與 Session.getInstance 的分別。

近日漁郎一直在困擾著一件程式設計上的問題,為何『求救發訊器 (Help Me! SOS)』程式在發訊者參數設定中,當使用者輸入完資料,並點選『儲存並測試』時, 如第一次輸入錯誤的郵件地址與密碼,不管接下來怎麼改發訊者參數資料,就算確定郵件地址與密碼都是對的,還是會傳送郵件失敗!


漁郎在摸了幾天後,終於!還是 Google 大神厲害!但要找對關鍵字,不然也沒折 @_@ ....

漁郎之前都一直以為是 javamail 的問題,偏偏咧,網路上的文章一大抄,找到的範例程式碼都差不多。於是乎只好土法練鋼用盡辦法一個一個程式段測,加 Log 啦,秀訊息啦,測到最後,發覺 Session.get 後面跟了不同的四組函式,因此將該四組函式中相類似於原程式碼 Session.getDefaultInstance 的對應函式 Session.getInstance 做為關鍵字,拿來祭拜 Google 大神,終於找到了網友給的正確答案!

原來阿~~ getDefaultInstance 在建立 session 的時候,第一次傳入的 username 與 password 參數會成為 final 屬性,是沒法改的,因此不管你怎改 username 與 password,該 session 還是會以原來的 username 與 password 傳送資料,除非該 session 斷了 (重開程式 session 還是在 @_@),因此,才會要等一段時間或重裝程式後,第一時間以正確的 username 與 password 建立 session 才能讓 javamail 透過該 session 正常傳送郵件。

而 getInstance 則不同,它能讓你不斷的以新的 username 與 password 資料來創建新的 session,因此,就解決了原本程式的問題,但缺點是因不斷創建 session,所以記憶體會多吃一些些,還好吃的不多就是了。

沒有留言:

張貼留言