11

我已使用链接通过 Google Play Core 库集成了应用内更新功能。

我正在使用立即更新选项,因为我们会定期进行各种重要的错误修复,这些修复对更新很重要。

以下是应用程序不会崩溃并成功更新应用程序以及崩溃的情况。

  1. 当应用程序更新可用时单击“更新”按钮,让更新正常完成而不会在两者之间中断 - 应用程序更新成功。
  2. 单击“更新”按钮,更新开始下载,但用户通过按“更新下载进度条”后出现的“x”按钮取消更新 - 应用更新已取消。
  3. 尝试再次打开应用程序,它会因以下错误而崩溃。

致命异常:java.lang.RuntimeException java.lang.reflect.InvocationTargetException com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:586) com.android.internal.os.ZygoteInit.main (ZygoteInit.java :942) 由 java.lang.reflect.InvocationTargetException 引起 java.lang.reflect.Method.invoke (Method.java) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:942) 由 android.content 引起。 IntentSender$SendIntentException android.app.Activity.startIntentSenderForResultInner (Activity.java:5019) com.google.android.play.core.appupdate.b.startUpdateFlowForResult (Unknown Source:5) co.behtarinternal.app.menu.MenuActivity$checkForAppUpdate$1 .onSuccess (MenuActivity.kt:239) co.behtarinternal.app.menu.MenuActivity$checkForAppUpdate$1.onSuccess (MenuActivity.kt:43) com.google.android.play.core.tasks.e.run (未知来源:27) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:942)

我也提到了这个问题及其答案,但无法理解如何实施这个解决方案。

我到处搜索了很多,但没有找到与此问题相关的任何可行解决方案。

如果你们中的任何人都遇到过类似的问题,并且您的解决方案有效,请帮助我。

4

1 回答 1

4

据我了解,您正在尝试使用AppUpdateInfo某处的相同实例,IntentPendingIntent您正在尝试多次使用它。由于 aPendingIntent只能使用一次,因此会引发异常。为了解决这个问题,我猜你有一个选择。

如果您能够在本地重现此错误,请调用startUpdateFlowForResult()try-catch 方法并尝试捕获IntentSender$SendIntentException, 或InvocationTargetException. 如果捕获到异常,则意味着PendingIntent已经使用了。假设您的checkUpdates()方法可以递归使用,checkUpdates()再次调用,这应该创建一个新AppUpdateManager实例并再次启动生命周期,这将导致一个新的、新鲜AppUpdateInfo的结果,因此PendingIntent应该让您再次打开应用程序更新弹出窗口的新方法。

编辑:我不确定,但是当onResume代码再次执行时会发生什么?就像,checkForUpdates被调用,但你也通过调用替换mAppUpdateManageronResume调用AppUpdateManager.getInstance(this)。因此,mAppUpdateManager.appUpdateInfo可能不属于新分配mAppUpdateManager的 in onResume,因为在应用程序启动时onCreateonResume都被调用。因此,对象本身可能不属于AppUpdateManager自身。

一个解决方案可能是使用两个不同的管理器,但是我认为该机制本身将返回一个使它们都相同(也许?)的单例,无论如何,您需要在调试模式下检查地址端点。调试对象应该看起来像AppUpdateManager@2b62aa,检查管理器是否不同。如果它们像我预测的那样变得不同,那么您的问题应该得到解决。

于 2020-02-06T07:24:25.950 回答