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

时间:2016-06-24 02:04:19

标签: android android-instant-run

在我的Android应用程序中,我正在调试它,启用了即时运行。

该应用程序经常给我意外错误,如果我做了一个干净的构建,它会得到解决。

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

只需执行完整版本,所有这些错误都可以在不进行代码更改的情况下得到解决。即时运行已成功使构建过程慢了两到三倍。

为什么我会收到这些错误?有谁知道如何立即运行正常工作?

4 个答案:

答案 0 :(得分:6)

你不是唯一的一个。 即时运行几乎没有稳定,或者我们现在说不可靠。

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

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

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

答案 1 :(得分:3)

Instant Run现在仍然充满了bug。甚至谷歌都说:

  

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

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

现在,如果我们关闭它会更好:

  

禁用即时运行:

     
      
  1. 打开“设置”或“偏好设置”对话框。
  2.   
  3. 导航至构建,执行,部署>即时跑步。
  4.   
  5. 取消选中启用即时运行旁边的复选框。
  6.   

答案 2 :(得分:1)

这是关于即时运行

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

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

答案 3 :(得分:0)

如果我更改了AndroidManifest.xml文件,android studio会执行完整版本,但是这可以更快地进行清理,然后构建项目。

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