在我的应用程序中,我正在与服务器通信进行大量工作,交易就像这样:
首先,我必须调用服务器以获取唯一ID(GUID
,或者我认为它在java中称为UUID
。之后,我可以使用服务器执行其他操作,而我必须通过我的操作发送收到的Id。问题是,此会话仅在5分钟不活动后有效,之后我需要从服务器获取新的Id。
因此,如果用户退出应用程序并且未处于活动状态,那么我只需将他发送回登录屏幕再次进行身份验证,并在他通过覆盖{返回我的应用程序时从服务器接收新的唯一ID我所有onResume
中的{1}}方法:
How to start Login Activity if user wasn't active for 5 minutes:
问题:但是,如果用户使用该应用程序5分钟并且在此期间他从未对服务器进行任何调用,那么他的ID将变为无效并且下一次他对服务器的调用将返回id无效消息。
所以我可以做这样的事情(伪代码):
Activities
问题:但我想避免调用服务器并获取会话无效消息。
所以我在我的应用程序类中持有Date参数,该参数最后一次从服务器上获取我的id。如果我应该先运行当前class SessionInvalidAwareMethod(AsyncTask task)
{
AsyncTask currentAsyncTask = task;
AsyncTask authenticateAsyncTask;
public SomeResult executeTask()
{
result = executeCurrentAsyncTask();
if (result = sessionInvalid)
{
executeAuthenticationTask()
result = executeCurrentAsyncTask();
}
return result;
}
}
或先运行AsyncTask
并且只有在完成后我才能使用它来决定取决于已经过了多少时间我应该运行当前authenticateAsyncTask
( AsyncTask
)?
有人可以向我解释一下整体处理这种情况的正确方法是什么?
感谢您的帮助朋友。
答案 0 :(得分:1)
我会让服务器使用cookie处理会话。它将在其API中进行登录/注销调用。 客户端将使用符合应用需求的登录/注销呼叫(即活动超时)。客户端可以从cookie获取登录状态。
如果您无法控制服务器会话超时,您可以创建一个保持活动的服务,该服务将每隔<5分钟对服务器进行一次空调用,并根据应用程序从应用程序启动/停止它需要。