之前eclipse時代,測試空應用啟動性能時,都是直接在ide中啟動,這樣修改起來友善。
到了android studio時代,這個習慣被我保持下來了。
結果就被instant run功能給小小坑了一下。
從性能日志上看,發現空應用在handlebindapplication的時候,在mtk6753晶片上費時60多毫秒,展訊9832晶片上超過100毫秒。
而空應用,既沒有application的oncreate,又沒有installprovider之類的,要花這麼長時間很奇怪。
後來列印了一下backtrace,原來是這樣的:
原來instantrun的時候,安裝的應用的application是com.android.tools.fd.runtime.bootstrapapplication,這個application重載了attachbasecontext,正是這個重載的方法耗費了這麼長的時間。
application的attach方法是個hide的方法:
50 @override
51 protected void attachbasecontext(context newbase) {
52 super.attachbasecontext(newbase);
53 }
65 protected void attachbasecontext(context base) {
66 if (mbase != null) {
67 throw new illegalstateexception("base context already set");
68 }
69 mbase = base;
70 }