[Android] android studio 2.0即時運行功能探秘


即時運行instant Run是android studio 2中,開發人員最關心的特性之一
在google發布studio 2.0之后,馬上更新體驗了一把,然而發現,並沒快多少,說好的即時運行呢?
於是去看了下官方文檔:

Introduced in Android Studio 2.0, Instant Run is a behavior for the Run  and Debug  commands that significantly reduces the time between updates to your app. Although your first build may take longer to complete, Instant Run pushes subsequent updates to your app without building a new APK, so changes are visible much more quickly.

Instant Run is supported only when you deploy the debug build variant, use Android Plugin for Gradle version 2.0.0 or higher, and set minSdkVersion to 15 or higher in your app's module-level build.gradle file. For the best performance, set minSdkVersion to 21 or higher.

After deploying an app, a small, yellow thunderbolt icon appears within the Run  button (or Debug  button), indicating that Instant Run is ready to push updates the next time you click the button. Instead of building a new APK, it pushes just those new changes and, in some cases, the app doesn't even need to restart but immediately shows the effect of those code changes.

Instant Run pushes updated code and resources to your connected device or emulator by performing a hot swapwarm swap, or cold swap. It automatically determines the type of swap to perform based on the type of change you made. The following table describes how Instant Run behaves when you push certain code changes to a target device.

 
即時運行時Run和Debug兩個指令的行為,可以明顯的減少更新你的APP的時間,雖然首次build可能會更耗時,但即時運行在你的app中加入了你的更改,而不是重新構建一個新的APK,使得我們可以更快地看到app的變化。
 
 
重點來了,即時運行只在以下情況才能被支持:
  1,你必須配置debug build variant.   如何配置:IDE的左下角,有個小標簽build variant,里面可以配置你的應用跑起來時是debug還是release,默認都是debug,所以不需要特別去配置;
  2,你必須使用 Android Plugin for Gradle version 2.0.0  或者更高的版本,這個在應用遷移到android studio 2.0的時候會提示你,你只要點擊確定就好啦~或者在工程根目錄的build.gradle中修改也行;
  3.,應用的最小支持版本要在15或以上,google推薦21及以上的版本以獲得最好的性能~
 
  配置完一個應用后,Run和Debug的按鈕旁邊就會多出一個閃電~表明即時運行已經准備好了~你只需點擊按鈕,就能快速看到新的變化哦~在一些情況下,你的應用甚至不需要去重啟,就可以直接看到代碼更改帶來的變化!!!
(實際測試的話,配置完是需要先跑一次的,此時做出更改的話,才會顯示閃電符號)
 
  即時運行更新代碼或資源到你的測試設備是通過3種方式的:熱交換,暖交換,冷交換(后面兩個交換沒聽過,自己瞎翻譯的,故名思議這三個是三種不同的級別)
它會通過你造成的改變,自動決定交換的類型。下面的表描述了一些改變對應的交換類型情況:
代碼的改變類型
即時運行的行為
改變一個已經存在的方法的實現
支持熱交換,這是最快的類型,可以快速地看到代碼變化,你的應用會保持運行,下次你調用到那個更改的方法時,會執行新的代碼。
熱交換並沒有重新實例化你app中的對象,在看到更新前,你可能需要重啟當前的activity或者應用。默認情況下,studio會自動重啟當前activity。也可以自己設置不自動重啟。
更改或者移除一個存在的資源
支持暖交換,這種交換還是很快。即時運行必須重啟你當前的activity來完成資源的更新,應用會一直運行,不過重啟activity時屏幕可能會閃爍,這是正常情況。
結構代碼的改變,例如:
增加,移除,更改:
1.注釋
2.實例域
3.靜態域
4靜態方法名?
5.實例方法名?
6父類的改變
7繼承的接口發生變化
8類的構造方法
9重新布局了使用動態資源ID的空間
在api21及以上的版本支持冷交換,該交換會慢一些,因為需要重新啟動應用,才能將更改提交到應用中。
在21一下的版本中,studio會構建一個完整的apk
更改了androidmanifest文件
更改了androidmanifest文件中引用到的資源
更改了android插件的UI元素(需要clean和rerun)
修改了manifest文件或其引用的資源時,studio 會自動構建一個新的apk來更新該改變,因為應用在安裝到設備上時的一些固定信息是由manifest文件中決定的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM