首先褒纲,no focus ANR報(bào)出是以統(tǒng)計(jì)焦點(diǎn)窗口為null的時(shí)間為準(zhǔn)准夷,只有窗口焦點(diǎn)為null的時(shí)間超時(shí)5秒才會(huì)報(bào)出;
ANR發(fā)生前莺掠,23:10:46.589 WMS把焦點(diǎn)窗口置為了null衫嵌;
01-01 23:10:46.589 2183 23336 D WindowManager: Input focus has changed to null
AMS把camera2 設(shè)為焦點(diǎn)應(yīng)用,開始啟動(dòng)(該句Log輸出有延遲)彻秆;
01-01 23:10:46.900 2183 4522 I am_focused_activity: [0,com.android.camera2/com.android.camera.CameraLauncher]
camera2 開始創(chuàng)建進(jìn)程楔绞,進(jìn)程創(chuàng)建完成结闸;
01-01 23:10:47.525 2183 2256 I am_proc_start: [0,20513,10040,com.android.camera2,activity,com.android.camera2/com.android.camera.CameraLauncher]
01-01 23:10:47.667 2183 2203 I am_proc_bound: [0,20513,com.android.camera2]
camera2 開始執(zhí)行自己的邏輯代碼,執(zhí)行onCreate,onResume等生命周期酒朵;
01-01 23:10:47.675 2183 2203 I am_restart_activity: [0,25833464,2298,com.android.camera2/com.android.camera.CameraLauncher]
camera2 生命周期走完onResume, WMS滿足轉(zhuǎn)換焦點(diǎn)窗口條件桦锄,可以開始轉(zhuǎn)移焦點(diǎn)窗口到CameraLauncher;
01-01 23:10:51.591 20513 20513 I am_on_resume_called: [0,com.android.camera.CameraLauncher]
從no focus ANR報(bào)出原理來說蔫耽,ANR發(fā)生的真正時(shí)間點(diǎn)應(yīng)該是23:10:51秒结耀,當(dāng)時(shí)系統(tǒng)負(fù)載比較高,下面Log輸出的時(shí)間出現(xiàn)延遲也是正吵渍。現(xiàn)象图甜;
01-01 23:10:52.450 2183 3086 I WindowManager: Input event dispatching timed out sending to application AppWindowToken{c86733c token=Token{4442cd1 ActivityRecord{18a2ff8 u0 com.android.camera2/com.android.camera.CameraLauncher t2298}}}. Reason: Waiting because no window has focus but there is a focused application that may eventually add a window when it finishes starting up.
焦點(diǎn)窗口轉(zhuǎn)移到CameraLauncher,ANR已發(fā)生了2秒多鳖眼,ANR發(fā)生后AMS需要dump 相關(guān)現(xiàn)場(chǎng)信息黑毅,dump過程中系統(tǒng)IO,性能短時(shí)間內(nèi)都是異常高具帮,會(huì)造成WMS轉(zhuǎn)移焦點(diǎn)的延遲博肋。
01-01 23:10:53.117 2183 2204 D WindowManager: Input focus has changed to Window{f9649b7 u0 com.android.camera2/com.android.camera.CameraLauncher}
過濾event.log
01-01 23:10:46.644 2183 23331 I am_proc_start: [0,20384,10008,com.android.browser,activity,com.android.browser/.BrowserActivity]
01-01 23:10:46.699 2183 3728 I am_proc_bound: [0,20384,com.android.browser]
01-01 23:10:46.706 2183 3728 I am_restart_activity: [0,145542536,2341,com.android.browser/.BrowserActivity]
>>01-01 23:10:46.900 2183 4522 I am_focused_activity: [0,com.android.camera2/com.android.camera.CameraLauncher]
>>01-01 23:10:46.985 2183 4522 I am_pause_activity: [0,145542536,com.android.browser/.BrowserActivity]
01-01 23:10:46.992 2183 4522 I am_task_to_front: [0,2298]
01-01 23:10:46.992 2183 4522 I am_new_intent: [0,107367927,2298,com.android.camera2/com.android.camera.CameraLauncher,android.intent.action.MAIN,NULL,NULL,274726912]
01-01 23:10:47.029 209 209 I sf_frame_dur: [com.android.calendar/com.android.calendar.PermissionsActivity,87,1,0,0,2,1,0]
01-01 23:10:47.473 209 209 I sf_frame_dur: [com.android.calendar/com.android.calendar.PermissionsActivity,0,0,0,0,1,0,0]
>>01-01 23:10:47.525 2183 2256 I am_proc_start: [0,20513,10040,com.android.camera2,activity,com.android.camera2/com.android.camera.CameraLauncher]
>>01-01 23:10:47.667 2183 2203 I am_proc_bound: [0,20513,com.android.camera2]
>>01-01 23:10:47.675 2183 2203 I am_restart_activity: [0,25833464,2298,com.android.camera2/com.android.camera.CameraLauncher]
01-01 23:10:48.288 2183 3725 I notification_cancel_all: [10040,20513,com.android.camera2,0,0,64,9,NULL]
01-01 23:10:49.424 208 208 I auditd : avc: denied { find } for service=batteryproperties scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:healthd_service:s0 tclass=service_manager
>>01-01 23:10:49.639 20384 20384 I am_on_resume_called: [0,com.android.browser.BrowserActivity]
>>01-01 23:10:49.913 20384 20384 I am_on_paused_called: [0,com.android.browser.BrowserActivity]
01-01 23:10:49.913 2183 1802 I am_failed_to_pause: [0,145542536,com.android.browser/.BrowserActivity,(none)]
01-01 23:10:50.275 20384 20424 I dvm_lock_sample: [com.android.browser,0,pool-1-thread-1,670,SQLiteOpenHelper.java,162,SQLiteConnection.java,-2,100]
01-01 23:10:50.630 2183 2252 I am_pss : [4526,10032,com.android.launcher3,12627968,9732096]
01-01 23:10:50.682 2183 2252 I am_pss : [11686,10024,com.android.music,11090944,9793536]
01-01 23:10:50.728 2183 2252 I am_pss : [11765,10022,android.process.media,4561920,3530752]
01-01 23:10:51.108 2183 4473 I am_proc_start: [0,20910,10070,com.android.gallery3d,service,com.android.gallery3d/com.sprd.gallery3d.app.FloatWindowAIDLService]
01-01 23:10:51.413 20384 20384 I browser_page_loaded: https://www.google.com/m?hl=zh-CN&q=%5B&source=android-launcher-search|535
>>01-01 23:10:51.591 20513 20513 I am_on_resume_called: [0,com.android.camera.CameraLauncher]
ANR發(fā)生時(shí)間段CPU整體負(fù)載是比較高的低斋;
01-01 23:10:54.032 2183 2256 D SprdRuntimeInfo: Cpu Core Count: 4
01-01 23:10:54.032 2183 2256 D SprdRuntimeInfo: Timer Circle: 2999ms.
01-01 23:10:54.032 2183 2256 D SprdRuntimeInfo: From time 52761591ms(2012-01-01 15:10:47.488555908 UTC) to 52764591ms(2012-01-01 15:10:50.488525390 UTC).
01-01 23:10:54.032 2183 2256 D SprdRuntimeInfo:
01-01 23:10:54.033 2183 2256 D SprdRuntimeInfo: * CPU USAGE: | * OTHER COUNTS:
01-01 23:10:54.033 2183 2256 D SprdRuntimeInfo: -1- IDLE USER SYSTEM NICE IOWAIT IRQ SOFTIRQ STEAL TOTAL | CTXT_SWITCH FG_FAULT FG_MAJ_FAULT
01-01 23:10:54.033 2183 2256 D SprdRuntimeInfo: cpu0(1): 33.33% 20.33% 26.00% 0.66% 17.33% 0.00% 2.33% 0.00% 100.00% | 10933 20617 91
01-01 23:10:54.033 2183 2256 D SprdRuntimeInfo: cpu1(1): 17.33% 24.66% 20.33% 0.33% 37.33% 0.00% 0.00% 0.00% 100.00% | 6222 24698 291
01-01 23:10:54.033 2183 2256 D SprdRuntimeInfo: cpu2(1): 13.00% 24.33% 22.66% 1.66% 38.33% 0.00% 0.00% 0.00% 100.00% | 6418 20368 388
01-01 23:10:54.033 2183 2256 D SprdRuntimeInfo: cpu3(1): 14.33% 23.66% 18.66% 0.33% 43.00% 0.00% 0.00% 0.00% 100.00% | 7198 21917 416
01-01 23:10:54.033 2183 2256 D SprdRuntimeInfo: ------------------
01-01 23:10:54.033 2183 2256 D SprdRuntimeInfo: Total: 19.50% 23.25% 21.91% 0.75% 34.00% 0.00% 0.58% 0.00% 100.00% | 30771 87600 1186
01-01 23:10:54.033 2183 2256 D SprdRuntimeInfo:
01-01 23:10:54.034 2183 2256 D SprdRuntimeInfo: Cpu Core Count: 4
01-01 23:10:54.034 2183 2256 D SprdRuntimeInfo: Timer Circle: 3000ms.
01-01 23:10:54.034 2183 2256 D SprdRuntimeInfo: From time 52764591ms(2012-01-01 15:10:50.488525390 UTC) to 52767591ms(2012-01-01 15:10:53.488525390 UTC).
01-01 23:10:54.034 2183 2256 D SprdRuntimeInfo:
01-01 23:10:54.034 2183 2256 D SprdRuntimeInfo: * CPU USAGE: | * OTHER COUNTS:
01-01 23:10:54.034 2183 2256 D SprdRuntimeInfo: -2- IDLE USER SYSTEM NICE IOWAIT IRQ SOFTIRQ STEAL TOTAL | CTXT_SWITCH FG_FAULT FG_MAJ_FAULT
01-01 23:10:54.034 2183 2256 D SprdRuntimeInfo: cpu0(1): 31.66% 11.66% 24.66% 2.00% 26.66% 0.00% 3.33% 0.00% 100.00% | 11503 12711 125
01-01 23:10:54.034 2183 2256 D SprdRuntimeInfo: cpu1(1): 10.33% 14.00% 29.00% 2.00% 44.66% 0.00% 0.00% 0.00% 100.00% | 6184 20094 384
01-01 23:10:54.034 2183 2256 D SprdRuntimeInfo: cpu2(1): 5.00% 17.66% 19.33% 2.66% 55.33% 0.00% 0.00% 0.00% 100.00% | 5617 16617 468
01-01 23:10:54.034 2183 2256 D SprdRuntimeInfo: cpu3(1): 6.33% 21.33% 20.33% 5.66% 46.33% 0.00% 0.00% 0.00% 100.00% | 5642 30951 427
01-01 23:10:54.035 2183 2256 D SprdRuntimeInfo: ------------------
01-01 23:10:54.035 2183 2256 D SprdRuntimeInfo: Total: 13.33% 16.16% 23.33% 3.08% 43.25% 0.00% 0.83% 0.00% 100.00% | 28946 80373 1404
01-01 23:10:54.035 2183 2256 D SprdRuntimeInfo:
AMS收到啟動(dòng)一個(gè)新Activity的消息后蜂厅,焦點(diǎn)窗口就會(huì)置為null,等到新Activity生命周期走完onResume膊畴,WMS才會(huì)再轉(zhuǎn)移焦點(diǎn)窗口掘猿,結(jié)束焦點(diǎn)窗口為null的狀態(tài),從目前Log來看唇跨,從窗口焦點(diǎn)為null稠通,到CameraLauncher生命周期走完onResume,已經(jīng)超時(shí)了5秒,所以報(bào)出ANR买猖,應(yīng)用啟動(dòng)緩慢是ANR主要原因改橘,以下兩個(gè)原因?qū)е聭?yīng)用啟動(dòng)慢;
系統(tǒng)原因玉控,系統(tǒng)整體負(fù)載較高飞主,32v4版本本身硬件條件有限,測(cè)試期間很容易出現(xiàn)系統(tǒng)高負(fù)載高诺,CPU高負(fù)載及內(nèi)存緊張會(huì)影響應(yīng)用進(jìn)程的創(chuàng)建速度碌识、核心系統(tǒng)服務(wù)與應(yīng)用的交互速度等,從當(dāng)前Log中就可以看到camera2從啟動(dòng)到進(jìn)程創(chuàng)建完成花費(fèi)了1秒虱而。其中ANR期間筏餐,browser,gallery3d等應(yīng)用啟動(dòng)也增加了系統(tǒng)負(fù)載牡拇;
Camera2 本身邏輯執(zhí)行花費(fèi)了3.916魁瞪;
該ANR是測(cè)試14.63 h后穆律,由于系統(tǒng)負(fù)載比較高,而Camera又是一個(gè)啟動(dòng)需要占用較多資源的應(yīng)用导俘,應(yīng)用偶然啟動(dòng)超時(shí)5秒報(bào)出的問題众旗;