【问题标题】:Android LVL (Licensing service) is incredibly slow! -- solutions? Async?Android LVL(许可服务)速度非常慢! ——解决方案?异步?
【发布时间】:2011-08-21 06:29:58
【问题描述】:

我在网上四处查看,看到其他一些帖子抱怨 Android 许可 (LVL) 库速度慢,但没有解决方案。在 HTC Thunderbolt(全新手机)上,它会将测试应用的启动时间延迟 3-5 秒以上。

有人对异步调用这个库有任何经验或想法吗?其他解决方案?我只是使用基本上提供的示例代码。真正令人讨厌的部分是整个应用程序在这个简单的许可证检查发生时被冻结,这真的很糟糕。

谢谢!

【问题讨论】:

  • 这里是诀窍,在另一个线程中运行 LVL,不要等待它完成后再开始游戏。然后,如果失败,请考虑阻止对内容的访问。或者这就是你已经在做的事情?
  • 对于我们这些 Java 傻瓜并且只复制粘贴它的人......您将如何在另一个线程中启动 LVL 验证?
  • 确实,非常慢(即使在 2018 年...)。我还有另一个问题:第一次启动应用程序时,我收到系统错误 291 (Error_Contacting_Server)。我必须再次启动 doCheck 以在 5 秒后获得正确的 ok 响应...您在第一次启动时遇到此 291 错误吗?

标签: android android-lvl


【解决方案1】:

Nitwit 想通了:licenseCheck 是异步的。

所以只需启动它,然后使用接下来的几行代码打开应用程序,当响应到达时,这将中断应用程序(即,如果您设置为在许可证无效时出现一个对话框,然后您的应用程序将开始加载,然后出现对话框,这会阻止所有内容)。

确保在“不允许”情况下的所有代码的后续代码中包含 finish()。

出色的结果:应用在加载时间上损失了四到五秒。

【讨论】:

    【解决方案2】:

    我可能错了,但我感觉 LVL 服务器在调试模式下使用时非常缓慢且有问题,也就是说,当我直接使用 Android Studio 在我的设备上安装应用程序并通过更改测试 LVL 实现时Google Play 控制台中的响应。实际上,在这种情况下使用的是沙箱服务器,而不是 Google Play 生产服务器。

    因此,为了对 LVL 实施做出快速和适当的响应,我将测试 apk(带有 toasts 以查看 LVL 响应)上传到 Google Play 控制台的 beta 测试通道。然后,由于 Google Play beta 测试 URL,我从 Google Play 下载了 apk。 LVL 响应更快更可靠。

    请告诉我你是否证实了这一观察。

    【讨论】:

      【解决方案3】:

      在您的 Activity 中实现 LicenseCheckerCallback 并像这样调用它:

      mLicenseChecker = new LicenseChecker(this, new MyPolicy(this, new AESObfuscator(getSalt(), getPackageName(), getDeviceId())), PUBLIC_KEY);
      mLicenseChecker.checkAccess(new MyCheckerCallback());
      mHandler = new Handler();
      

      如果许可证无效,则发布给处理程序: 在MyCheckerCallback:

      public void dontAllow() {
          if (isFinishing()) {
              return; //don't update UI when app is finishing
          }
          mHandler.post(new Runnable() {
          public void run() {
              //show toast message stating license is invalid
              //redirect user to Market
              //call finish()
              }
          });
      }
      

      【讨论】:

      • 这无济于事。调用 AESObfuscator() 太慢了。上面在另一个线程中调用它的建议会加快速度。
      • @Barry Fruitman 它不会通过在另一个线程中调用它来加速它......它只是阻止应用程序的其余部分等待它。我从来没有说过要异步运行它......但我从来没有见过它需要花费大量时间来加载。你有实例化AESObfuscator 的指标吗?哪些设备?
      • 我在检查许可证时遇到了同样的延迟(3-5 秒或更长时间),我追踪到 AESObfuscator 构造函数的延迟。在 stackoverflow 上搜索“AESObfuscator”或“slow LicenseChecker”,您会看到类似的投诉。在 Activity.onCreate() 中启动许可证检查将冻结应用程序几秒钟,这就是我和上述评论者建议分叉一个新线程的原因。 stackoverflow.com/questions/4629603/…
      • @Barry Fruitman 我在哪里说过要在onCreate() 中实例化它?
      猜你喜欢
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 2018-03-03
      相关资源
      最近更新 更多