2013-03-30 40 views
0

在我的應用我的工作有很多與服務器的通信和處理是這樣的:我如何妥善處理服務器通訊在Android的:

首先要撥打電話到服務器,以獲得一個唯一的ID( GUID,或者我認爲它在java中被稱爲UUID)。之後我可以在服務器上執行其他操作,而我必須通過操作發送收到的ID。問題是這個會話只有5分鐘的非活動狀態有效,之後我需要從服務器獲取一個新的Id。

因此,如果用戶退出應用程序,並且沒有激活,那麼我只是將他發回到登錄屏幕以再次進行身份驗證,並在他重新登錄到我的應用程序時從服務器接收新的唯一ID onResume方法在我所有的Activities的:

How to start Login Activity if user wasn't active for 5 minutes:

問題:但是,如果使用5分鐘,就在這個時候,他從來沒有向服務器的任何調用應用程序的用戶,他的身份證無效什麼接下來他對服務器的調用返回id無效消息。

所以我可以做這樣的(僞代碼)的一些事情:

class SessionInvalidAwareMethod(AsyncTask task) 
{ 
    AsyncTask currentAsyncTask = task; 
    AsyncTask authenticateAsyncTask; 

    public SomeResult executeTask() 
    { 
     result = executeCurrentAsyncTask(); 
     if (result = sessionInvalid) 
     { 
      executeAuthenticationTask() 
      result = executeCurrentAsyncTask(); 
     } 
     return result; 
    } 
} 

問題:但我想避免調用服務器和獲取會話無效消息。 所以我在我的應用程序類中保存Date參數,這個參數最後一次從服務器上離開我的ID。我怎麼能用它來決定取決於已經過了多少時間,如果我應該先運行當前的AsyncTask或運行authenticateAsyncTask,並且只有在完成後我才應該運行當前的AsyncTaskMy problem is to do the second step in a synchronous way)?

有人可以向我解釋什麼是正確處理這種情況的正確方法?

感謝您的幫助朋友。

回答

1

我會讓服務器使用cookie來處理會話。它將在其API中有一個登錄/註銷調用。 客戶端將使用根據應用程序需要(即活動超時)的登錄/註銷調用。客戶端可以從cookie獲取登錄狀態。

如果您無法控制服務器會話超時,則可以創建一個保持活動狀態的服務,每過一分鐘< 5分鐘就會向服務器發出空的呼叫,並根據應用程序從應用程序啓動/停止它需要。

+0

實際上,我無法控制服務器端如何實現,必須根據我目前的工作情況進行工作。我想這是你必須與Itay進行的討論。你想讓我告訴他這個? –

+0

當然,但在工作時間:) –

+0

赫:)會做。 –