【问题标题】:Android: App crashes frequently with instant runAndroid:即时运行时应用程序经常崩溃
【发布时间】:2016-10-26 13:16:11
【问题描述】:

在我的 android 应用中,我在启用即时运行的情况下对其进行调试。

该应用程序经常给我意外错误,如果我进行干净的构建,这些错误就会得到解决。

例如,有时在类实际存在的情况下会出现类未找到异常。此外,在尝试将findViewById() 返回的View 转换为目标类型时,有时会出现类转换异常(可能是android studio 在热部署布局时误解了元素ID)。

所有这些错误都可以在不更改代码的情况下得到解决,只需进行完整构建即可。 Instant run 成功地让我的构建过程慢了两到三倍。

为什么会出现这些错误?有谁知道如何让即时运行正常工作?

【问题讨论】:

  • 适当地使用异常处理代码(try/catch 块)。try/catch 块围绕可能产生异常的代码,并在必要时使用 finally 块清理资源。
  • 我遇到了同样的问题,如果你想在其他设备上测试它,而不是你的模拟器或你用来测试的设备,请做一个完整的构建。
  • 那么我们如何利用即时运行@karanvs
  • 如果您目前没有使用Android Studio,请先尝试使用最新稳定版本的Android Studio。

标签: android android-instant-run


【解决方案1】:

如果我更改AndroidManifest.xml 文件,android studio 会执行完整构建,但这比先清理然后构建项目要快得多。

所以,每当我希望 android studio 完全构建项目时,我都会在清单文件中添加一个空行。这对于执行手动完整构建非常有效。

【讨论】:

    【解决方案2】:

    你不是唯一一个。 Instant Run 目前不太稳定,或者我们可以说不可靠。

    Instant Run 有几个交换步骤this document describes。在您的情况下,Instant Run 无法很好地识别您的更改,即使需要冷交换,热交换也是如此,等等。

    Instant Run 在编辑次要 GUI 布局时很有用,我想说它是目前唯一有用的场景,所以我建议您在一般开发过程中将其关闭。您可以通过取消选中 Settings > Build, Execution, Deployment > Enable Instant Run to hot swap... 复选框来禁用它。

    如果您认为 Instant Run 很花哨,并且仍然想使用它,那么您可能会多次遇到这样的问题。为此,只需按照您的经验重建所有内容。这就是我们现在所能做的。

    【讨论】:

      【解决方案3】:

      Instant Run 现在仍然充满错误。连谷歌都这么说:

      Instant Run 旨在加快构建和部署过程 大多数情况。但是,使用 Instant Run 有一些方面 这可能会影响其行为以及与您的应用程序的兼容性。如果你 在使用 Instant Run 时遇到任何其他问题,请file a bug

      它将一些 dex 文件添加到我们的应用程序以加快构建和部署过程。 有时当更改布局然后构建并运行项目时,它仍然显示旧布局。甚至它生成的apk也无法在某些设备上运行。

      现在,最好关闭它:

      禁用即时运行:

      1. 打开“设置”或“首选项”对话框。
      2. 导航至构建、执行、部署 > 即时运行。
      3. 取消选中启用即时运行旁边的框。

      【讨论】:

        【解决方案4】:

        这是关于Instant Run的文档:

        1. Android Studio 现在部署干净构建的速度比以往任何时候都快。 此外,将增量代码更改推送到模拟器或 物理设备现在几乎是瞬时的。查看您的更新 无需重新部署新的调试版本,或者在许多情况下,无需重新部署 重新启动应用。
        2. Instant Run 支持将以下更改推送到正在运行的应用程序:
          • 对现有实例方法或静态方法的实现的更改
          • 对现有应用资源的更改
          • 结构代码的更改,例如方法签名或静态字段(需要运行 API 级别 21 或更高级别的目标设备)。

        所以我认为当您添加新类或添加新 view_id 时,您需要清理 - 重建您的项目。这只是我的看法,如果我错了,请纠正我。 More info about Instant Run

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-02-14
          • 2021-11-15
          • 2012-06-26
          • 1970-01-01
          • 1970-01-01
          • 2015-10-29
          相关资源
          最近更新 更多