【问题标题】:Token Pattern for AndroidAndroid 的令牌模式
【发布时间】:2012-05-25 06:51:30
【问题描述】:

我有一个 Android 项目,我在其中从服务器获取令牌进行身份验证,并将其用于对服务器的进一步查询。令牌大约在 10 分钟后过期,所以我必须获取一个新令牌。我现在的模式是这样的:

1-在用户第一次启动应用时获取token

2-使用“请稍候”对话框阻止用户输入,这样他就不会尝试从其他活动发送带有空令牌的查询

3-保存令牌和时间戳,停止阻止用户输入

4-定期检查活动的onCreate()方法中的时间戳

5-必要时更新。

我的问题是这样的;如果用户打开一个活动并且令牌已过期,我的应用程序会再次阻止用户输入并尝试获取令牌。但是,在后台,应用程序的正常逻辑/流程会继续,并尝试使用旧令牌或空令牌向服务器发送查询。

所以我想阻止这个查询任务 - 这是一个 AsyncTask 就像令牌获取一样 - 并在令牌获取完成后启动它。我如何使用这种模式,这是一个正确的模式吗?

让一个线程等待另一个线程完成?

【问题讨论】:

    标签: android multithreading asynchronous android-asynctask token


    【解决方案1】:

    我会考虑使用带有自定义身份验证器的 Android 帐户管理器来处理令牌。 SampleSyncAdapter 向您展示了如何进行。使用AccountManager 的getAuthToken 获取当前令牌。在身份验证器中,您可以包含在超时时使令牌无效的逻辑,这将导致身份验证器在下一次请求令牌时联系服务器。

    但我想您的项目实现此功能的开销可能太大。对于您当前的设置,我看到了两种方法:

    1. 也许您可以尝试简单地 cancel 当前查询并在检索到新令牌后触发新查询?
    2. 使用Java synchronization primitives 阻止。例如,创建一个“锁定”对象并在异步任务和更新令牌的地方使用它:

      protected Result doInBackground(Params... params) {
          //
          // the request and other stuff that does not require the token.
      
          synchronized(lock) {
              //
              // communicate with the server.
          }
      }
      

    【讨论】:

    • 你能否提供一个很好的资源来研究java并发可能有很多例子。官方的Java教程我看了好几遍了,还是没能很好的掌握。
    • 对不起,这就是我正在使用的。可能有一些关于这个主题的书籍,但我不知道有什么可以推荐给你的。您可能还可以在 Slideshare (slideshare.net/search/…) 上找到一些不错的幻灯片。
    猜你喜欢
    • 2017-08-14
    • 2018-09-23
    • 1970-01-01
    • 2023-04-04
    • 2017-03-28
    • 2020-09-14
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多