在应用程序更新中执行 java.lang.reflect.InvocationTargetException

Div*_*pta 9 android in-app-update google-play-core

我使用链接集成了 Google Play 核心库的应用内更新功能。

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

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

  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)

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

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

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

Fur*_*kul 7

据我了解,您正在尝试使用某个AppUpdateInfo地方的同一个实例,而Intent不是PendingIntent您尝试多次使用的实例。由于 aPendingIntent只能使用一次,因此它会抛出异常。为了解决这个问题,我猜你有一个选择。

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

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

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

  • 问题是,这个错误并不经常发生,而且在测试时也不会发生,只有当我进行更新并且用户尝试通过应用程序内更新下载它时才会发生。那时,不同用户的每次更新都会出现此错误。所以只能通过Crashlytics日志查看,不能在本地查看 (2认同)