一、文檔概述
本文旨在記錄錯誤信息Error type 2: android.util.AndroidException: Can't connect to activity manager; is the system running?
問題分析及解決方式。
二、問題描述
在今天測試過程中發現任務卡在某一階段無法通過,其中提示信息如下:
提示信息顯示Android系統沒有運行。
出現這個問題很奇怪的,正常來說是不會出現這種情況的。
既然出現了就開始分析。經過搜索,發現並沒有什麼有效信息。其中的解釋都是重啓手機,當然,重啓手機可以解決問題,但是我們還是不知道爲什麼會產生這個問題。
暫時沒有什麼頭緒。。。
突然,靈光一現。。。。。。
由於提示信息表示Android系統未運行,Android系統實際運行的是一個zygote進程,通過這個進程再fork子進程來運行app的。從側面可以說明,zygote就是Android system。
因此可能就是zygote進程掛了導致提示如上信息。
復現這個問題就簡單多了,只需要kill掉zygote進程即可。
之前調研adb使用發現使用adb shell stop即可實現。
三、問題復現
目標:
使用命令打開app:
- adb shell am start -n com.android.settings/com.android.settings.Settings
1、正常情況:
隨後手機會顯示設置界面。
2、異常情況:
首先運行以下命令,關閉zygote進程:
- adb shell stop //(現象:單擊電源鍵屏幕不亮)
隨後打開目標app,提示信息如下:
可以發現,顯示的信息和工程代碼錯誤信息一致。
四、小結
經過以上分析,出現以上錯誤的原因的確是zygote進程異常退出導致的。
爲什麼呢?因爲zygote進程控制着系統服務,包括AMS等關鍵服務。如果zygote進程異常退出,所以進程包括服務都會被關閉,導致提示系統沒有運行。
解決的方式比較簡單:
1、運行:
- adb shell start
2、重啓手機
五、注意事項
注1:部分手機需要root權限運行
注2:關閉zygote進程之後,手機還是可以使用adb進行控制的