【併發程式設計】通過命令列獲取執行緒資訊
阿新 • • 發佈:2019-01-31
命令
adb shell ps
- -t 檢視程序中執行緒的資訊
- -x 檢視utime和stime
- -P 檢視屬性
- -p 檢視排程策略,通常是檢視一個app處於前臺還是後臺
- -c 檢視哪一個CPU在執行這個程序
- name|pid 用名字或pid過濾
例子
(1) 檢視包名為com.eat的執行緒,也就是com.eat應用的UI執行緒。
adb shell ps -t |grep com.eat
app_62 21964 141 127748 17012 ffffffff 00000000 S com.eat
UID: app_62 (程式安裝的時候,系統分配的。Linux系統是多使用者系統,在Android中,一個使用者就相當一個應用程式。)
PID: 21964(程序ID)
PPID:141(這個是Zygote程序,因為所有的Android程式都是從這個程序“孵化”出來的。)
另外,也可以用DDMS去檢視程序的資訊。
(2) 檢視app_62這個應用程式中所有的執行緒。
adb shell ps -t |grep app_62 app_62 21964 141 127748 17012 ffffffff 00000000 S com.eat app_62 21965 21964 127748 17012 ffffffff 00000000 S HeapWorker app_62 21966 21964 127748 17012 ffffffff 00000000 S GC app_62 21967 21964 127748 17012 ffffffff 00000000 S Signal Catcher app_62 21968 21964 127748 17012 ffffffff 00000000 S JDWP app_62 21969 21964 127748 17012 ffffffff 00000000 S Compiler app_62 21970 21964 127748 17012 ffffffff 00000000 S Binder Thread # app_62 21971 21964 127748 17012 ffffffff 00000000 S Binder Thread #
一個嶄新的應用程式包括不下10個執行緒,大多數都是Dalvik的內部執行緒。從應用程式的角度,不需要關心它們。
除了com.eat以外的其他所有執行緒的PPID都是21966,也就是com.eat的PID。這是因為這些執行緒都是從UI執行緒孵化出來的。
要關心的有3個執行緒,分別為:
app_62 21964 141 127748 17012 ffffffff 00000000 S com.eat app_62 21970 21964 127748 17012 ffffffff 00000000 S Binder Thread # app_62 21971 21964 127748 17012 ffffffff 00000000 S Binder Thread #
不難看出,com.eat是UI執行緒;另外2個Binder執行緒用來呼叫系統的一些服務,一個是ApplicationThead,一個是ViewRoo.W物件。
參考資料