Android:应用程序经常使用即时运行崩溃。

7
在我的Android应用中,我启用了即时运行进行调试。
这个应用程序经常会出现意外错误,但如果我进行全新的构建,问题就会得到解决。
例如,有时候会出现找不到类的异常,但实际上该类是存在的。此外,有时候在将findViewById()返回的View强制转换为目标类型时会出现类转换异常(可能是因为Android Studio在热部署布局时误解了元素ID)。
所有这些错误都可以通过进行全新的构建而无需进行任何代码更改来解决。即时运行已成功使我的构建过程变慢两到三倍。
我为什么会遇到这些错误?有人知道如何让即时运行正常工作吗?

适当使用异常处理代码(try/catch块)。在可能生成异常的代码周围使用try/catch块,并在必要时使用finally块清理资源。 - Developer
我曾经遇到过同样的问题,每当你想在其他设备上测试它时,请进行完整的构建,而不是使用模拟器或用于测试的设备。 - karan vs
那么我们如何利用即时运行?@karanvs - Shubham AgaRwal
如果您目前没有使用最新稳定版本的Android Studio,请首先尝试使用它。 - karan vs
4个回答

6
你不是唯一一个有这个问题的人。 目前来说,Instant Run相对不太稳定,甚至可以说不可靠。
Instant Run有几个交换步骤,如这份文档所述。在你的情况下,Instant Run可能无法很好地识别你的更改,因此即使需要冷交换,也会进行热交换等。
当编辑少量GUI位置时,Instant Run是有用的,我想说的是当前它是唯一有用的场景,因此我建议在一般开发中将其关闭。您可以通过取消选中“设置”>“构建、执行、部署”>“启用即时运行以进行热交换……”复选框来禁用它。
如果你认为Instant Run很棒并且仍然想使用它,你可能会遇到这样的问题很多次。对于这种情况,就像你经历的那样,重新构建所有内容。现在我们能做的只有这些了。

3

当前,Instant Run仍然存在很多漏洞。就连谷歌也如此说:

Instant Run旨在加速大多数情况下的构建和部署过程。但是,使用Instant Run可能会影响其行为并影响其与您的应用程序的兼容性。如果您在使用Instant Run时遇到任何其他问题,请提交错误报告

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

目前,最好关闭它:

禁用Instant Run的方法:

  1. 打开“设置”或“首选项”对话框。
  2. 导航到“构建,执行,部署>Instant Run”。
  3. 取消选中“启用Instant Run”旁边的复选框。

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

所以我认为当您添加新类或添加新的view_id时,需要清除-重建您的项目。这只是我的意见,如果我错了,请纠正我。 有关Instant Run的更多信息


0
如果我更改了AndroidManifest.xml文件,Android Studio会执行完整的构建,但是先进行清理,然后再构建项目会更快。
所以,每当我想要Android Studio进行完整构建时,我会在清单文件中添加一行空白。这样做可以更有效地进行手动完整构建。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接