はじめまして、nomuraと申します。
縁あって最近Androidアプリ開発に携わっており、主にAndroid関連の記事をあげていくと思います。
よろしくお願いします。
Android Studioでアプリ開発する時、USB経由でPCに実機を接続して動作確認しつつ…となるかと思いますが、Instant Runが便利で、いつも使っています。
ただ、修正が即反映される時とそうでない時があったり、ビルドが走って通常のRunとあまり変わらなかったりと、挙動が異なることがありました。
要する時間も数秒〜数十秒と大きく変わるので、どういう場合にどんな動作になるのかを調べてみました。
何が変更されたかによって、Android Studioが以下3つのいずれかを自動判別して実行します。
なお、コールドスワップはAPI21以上なら実行されますが、API20以下はビルドおよびデプロイが行われます。
以下の変更があった場合はコールドスワップが実行されます。
(繰り返しになりますが、API21以上のみです)
また、少し特殊な条件として
マルチプロセスのアプリで、メインプロセス以外に対してメソッド実装や既存リソースへの変更をした場合も、コールドスワップになります。
以下の変更があった場合、Instant Runではなくビルドおよびデプロイが自動的に実行されます。
アプリのランチャーアイコン情報やIntent-Filterなどがマニフェストファイルに記載されているためです。
onCreateメソッドに変更があった場合はRun、あるいはRerunが必要です。
アプリの構成や変更箇所によっては、アクティビティではなくアプリ自体の再起動が必要になることもあると思います。
アクティビティのライフサイクルが完了していないと、onCreateが再実行されませんので、当然といえば当然ですね。
デフォルト設定でアクティビティを再実行しているのも、これが理由かなと思ってます。
公式ドキュメント
公式の日本語ドキュメントです。
Instant Runの最適化・高速化、無効化オプションについての説明などもありますので、興味のある方はご覧になってみてはいかがでしょうか。
今回の執筆にあたってInstant Runに関する既存の記事を読みましたが、
リリース当時のテンション高めな文章が散見されて、皆が待ち望んでた機能だったようです。
私はAndroid Studioを使い始めた時点で3.0が最新でしたので、あって当然の機能でしたが
少し感謝の気持ちが生まれました。ありがとうInstant Run!