0

私のアプリケーションでは、サーバー通信を頻繁に使用していますが、取引は次のようになります。

最初に、一意の ID を取得するためにサーバーを呼び出す必要があります (またはJava でGUID呼び出されると思います)。UUIDその後、受信したIDを操作で送信する必要がある間、サーバーで他の操作を実行できます。問題は、このセッションが 5 分間のみ有効で、その後サーバーから新しい ID を取得する必要があることです。

したがって、ユーザーがアプリケーションを終了してアクティブでなかった場合は、ログイン画面に戻して再度認証し、アプリケーションに戻ったときにサーバーから新しい一意の ID を受け取るためにonResume、すべてのメソッドをオーバーライドします。私のActivities

ユーザーが 5 分間アクティブでない場合にログイン アクティビティを開始する方法:

質問:しかし、ユーザーがアプリケーションを 5 分間使用し、その間サーバーに呼び出しを行わなかった場合、ID が無効になり、次のサーバーへの呼び出しで id 無効メッセージが返された場合はどうなるでしょうか。

したがって、次のようなことを行うことができます(疑似コード):

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

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

問題:しかし、サーバーへの呼び出しとセッション無効メッセージの取得を回避したいと考えています。そのため、サーバーからIDを最後に取得したときに保持するアプリケーションクラスにDateパラメーターを保持します。どのくらいの時間が経過したかに応じて、現在のものをAsyncTask実行するか、authenticateAsyncTask最初のものを実行し、それが終了してから現在のものを実行する必要があるかを決定するにはどうすればよいですかAsyncTask( My problem is to do the second step in a synchronous way)?

この種の状況を全体的に処理する正しい方法は何ですか?

助けてくれた友達に感謝します。

4

1 に答える 1

1

サーバーが Cookie を使用してセッションを処理するようにします。API にログイン/ログアウト呼び出しがあります。クライアントは、アプリのニーズ (アクティビティ タイムアウトなど) に応じてログイン/ログアウト コールを使用します。クライアントは、Cookie からログイン ステータスを取得できます。

サーバー セッションのタイムアウトを制御できない場合は、5 分未満ごとにサーバーに空の呼び出しを行い、アプリのニーズに応じてアプリから開始/停止するキープアライブ サービスを作成できます。

于 2013-04-01T08:45:36.737 に答える