我已经更新到最新版本的 android studio (2.1)。文档中提到,android studio 最新版本将在 android studio 的即时运行功能中支持冷热交换。
谁能告诉我热交换和冷交换有什么区别
我已经更新到最新版本的 android studio (2.1)。文档中提到,android studio 最新版本将在 android studio 的即时运行功能中支持冷热交换。
谁能告诉我热交换和冷交换有什么区别
阅读Instant Run 的官方文档以获取完整的详细信息。主要细节如下:
什么是热插拔、热插拔和冷插拔?
热插拔
这是最快的交换类型,几乎可以立即看到更改。您的应用程序继续运行,并在下次调用该方法时使用具有新实现的存根方法。
热交换
这种交换仍然非常快,但需要在 Instant Run 将更改的资源推送到目标设备时自动重新启动活动。您的应用程序会继续运行,但当 Activity 重新启动时,屏幕上可能会出现小闪烁——这是正常的。
冷交换
(API 级别 21 或更高):Instant Run 将结构代码更改推送到目标设备并重新启动整个应用程序。
对于运行 API 级别 20 或更低级别的目标设备,Android Studio 会部署 APK 的完整版本。
触发每个交换的代码更改类型
什么触发热交换?
Change implementation code of an existing instance method or static method
什么触发了热交换?
Change or remove an existing resource
什么触发冷交换?
Structural code changes, such as:
- Add, remove, or change:
- an annotation
- an instance field
- a static field
- a static method signature
- an instance method signature
Change which parent class the current class inherits from
Change the list of implemented interfaces
Change a class static initializer
Reorder layout elements that utilize dynamic resource IDs
此功能称为即时运行。
文档中的表格中列出了其工作方式和时间的详细说明。
我找到了这个完美的帖子。它用图形插图解释了这个概念。
https://medium.com/google-developers/instant-run-how-does-it-work-294a1633367f#.g7r0yk9g4
快速回顾是:
热交换:-在运行代码中所做的更改。无需重启。节省时间。
热交换:-进行更改并重新启动特定活动。
冷交换:-重新启动活动以访问更改。
PS:-从个人经验来看,在热插拔中,在 onCreate() 中分配的值在 onResume() [或在 onCreate] 之外不可用,因此为 null。因此,如果值仅在 onCreate() 块中初始化,onResume() 可能会抛出 nullPointerException。
(我不确定这是否是唯一的情况,如果我的逻辑和推理错误,请评论/编辑。)