2013-03-30 41 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

赫:)会做。 –