轉載-Android EventLog含義

一. 概述

在調試分析Android的過程中,比較常用的地查看EventLog,非常簡潔明瞭地展現當前Activity各種狀態,當然不至於此,比如還有window的信息。那麼本文就列舉以下am相關的tags含義。

本文涉及的源碼類有EventLog.java, EventLogTags.java,另外tags格式的定義位於文件/system/etc/event-log-tags

如果在終端輸入:

logcat -b events

那麼會輸出大量類似這樣的信息:

  1. 06-01 13:44:55.518 7361 8289 I am_create_service: [0,111484394,.StatService,10094,7769]
  2. 06-01 13:44:55.540 7361 8343 I am_proc_bound: [0,3976,com.android.providers.calendar]
  3. 06-01 13:44:55.599 7361 8033 I am_create_service: [0,61349752,.UpdateService,10034,1351]
  4. 06-01 13:44:55.625 7361 7774 I am_destroy_service: [0,61349752,1351]
  5. ...

通過字面意思,就能得到不少信息量,比如am_create_service,創建service,但是後面括號中內容的具體含義,其實有很高的價值。 接下來通過一張表格來展示含義。

二. EventLog

2.1 ActivityManager

Num TagName 格式 功能
30001 am_finish_activity User,Token,TaskID,ComponentName,Reason  
30002 am_task_to_front User,Task  
30003 am_new_intent User,Token,TaskID,ComponentName,Action,MIMEType,URI,Flags  
30004 am_create_task User ,Task ID  
30005 am_create_activity User ,Token ,TaskID ,ComponentName,Action,MIMEType,URI,Flags  
30006 am_restart_activity User ,Token ,TaskID,ComponentName  
30007 am_resume_activity User ,Token ,TaskID,ComponentName  
30008 am_anr User ,pid ,Package Name,Flags ,reason ANR
30009 am_activity_launch_time User ,Token ,ComponentName,time  
30010 am_proc_bound User ,PID ,ProcessName  
30011 am_proc_died User ,PID ,ProcessName  
30012 am_failed_to_pause User ,Token ,Wanting to pause,Currently pausing  
30013 am_pause_activity User ,Token ,ComponentName  
30014 am_proc_start User ,PID ,UID ,ProcessName,Type,Component  
30015 am_proc_bad User ,UID ,ProcessName  
30016 am_proc_good User ,UID ,ProcessName  
30017 am_low_memory NumProcesses Lru
30018 am_destroy_activity User ,Token ,TaskID,ComponentName,Reason  
30019 am_relaunch_resume_activity User ,Token ,TaskID,ComponentName  
30020 am_relaunch_activity User ,Token ,TaskID,ComponentName  
30021 am_on_paused_called User ,ComponentName  
30022 am_on_resume_called User ,ComponentName  
30023 am_kill User ,PID ,ProcessName,OomAdj ,Reason 殺進程
30024 am_broadcast_discard_filter User ,Broadcast ,Action,ReceiverNumber,BroadcastFilter  
30025 am_broadcast_discard_app User ,Broadcast ,Action,ReceiverNumber,App  
30030 am_create_service User ,ServiceRecord ,Name,UID ,PID  
30031 am_destroy_service User ,ServiceRecord ,PID  
30032 am_process_crashed_too_much User ,Name,PID  
30033 am_drop_process PID  
30034 am_service_crashed_too_much User ,Crash Count,ComponentName,PID  
30035 am_schedule_service_restart User ,ComponentName,Time  
30036 am_provider_lost_process User ,Package Name,UID ,Name  
30037 am_process_start_timeout User ,PID ,UID ,ProcessName timeout
30039 am_crash User ,PID ,ProcessName,Flags ,Exception,Message,File,Line Crash
30040 am_wtf User ,PID ,ProcessName,Flags ,Tag,Message Wtf
30041 am_switch_user id  
30042 am_activity_fully_drawn_time User ,Token ,ComponentName,time  
30043 am_focused_activity User ,ComponentName  
30044 am_home_stack_moved User ,To Front ,Top Stack Id ,Focused Stack Id ,Reason  
30045 am_pre_boot User ,Package  
30046 am_meminfo Cached,Free,Zram,Kernel,Native 內存
30047 am_pss Pid, UID, ProcessName, Pss, Uss 進程

下面列舉tag可能使用的部分場景

  • am_low_memory:位於AMS.killAllBackgroundProcesses或者AMS.appDiedLocked,記錄當前Lru進程隊列長度。
  • am_pss:位於AMS.recordPssSampleLocked(
  • am_meminfo:位於AMS.dumpApplicationMemoryUsage
  • am_proc_start:位於AMS.startProcessLocked,啓動進程
  • am_proc_bound:位於AMS.attachApplicationLocked
  • am_kill: 位於ProcessRecord.kill,殺掉進程
  • am_anr: 位於AMS.appNotResponding
  • am_crash:位於AMS.handleApplicationCrashInner
  • am_wtf:位於AMS.handleApplicationWtf
  • am_activity_launch_time:位於ActivityRecord.reportLaunchTimeLocked(),後面兩個參數分別是thisTime和 totalTime.
  • am_activity_fully_drawn_time:位於ActivityRecord.reportFullyDrawnLocked, 後面兩個參數分別是thisTime和 totalTime
  • am_broadcast_discard_filter:位於BroadcastQueue.logBroadcastReceiverDiscardLocked
  • am_broadcast_discard_app:位於BroadcastQueue.logBroadcastReceiverDiscardLocked

Activity生命週期相關的方法:

  • am_on_resume_called: 位於AT.performResumeActivity
  • am_on_paused_called: 位於AT.performPauseActivity, performDestroyActivity
  • am_resume_activity: 位於AS.resumeTopActivityInnerLocked
  • am_pause_activity: 位於AS.startPausingLocked
  • am_finish_activity: 位於AS.finishActivityLocked, removeHistoryRecordsForAppLocked
  • am_destroy_activity: 位於AS.destroyActivityLocked
  • am_focused_activity: 位於AMS.setFocusedActivityLocked, clearFocusedActivity
  • am_restart_activity: 位於ASS.realStartActivityLocked
  • am_create_activity: 位於ASS.startActivityUncheckedLocked
  • am_new_intent: 位於ASS.startActivityUncheckedLocked
  • am_task_to_front: 位於AS.moveTaskToFrontLocked

2.2 Power

Num TagName 格式 功能
2722 battery_level level, voltage, temperature  
2723 battery_status status,health,present,plugged,technology  
2730 battery_discharge duration, minLevel,maxLevel  
2724 power_sleep_requested wakeLocksCleared 喚醒鎖數量
2725 power_screen_broadcast_send wakelockCount  
2726 power_screen_broadcast_done on, broadcastDuration, wakelockCount  
2727 power_screen_broadcast_stop which,wakelockCount 系統還沒進入ready狀態
2728 power_screen_state offOrOn, becauseOfUser, totalTouchDownTime, touchCycles  
2729 power_partial_wake_state releasedorAcquired, tag  

部分含義:

  • battery_level: [19,3660,352] //剩餘電量19%, 電池電壓3.66v, 電池溫度35.2℃
  • power_screen_state: [0,3,0,0] // 滅屏狀態(0), 屏幕超時(3). 當然還有其他設備管理策略(1),其他理由都爲用戶行爲(2)
  • power_screen_state: [1,0,0,0] // 亮屏狀態(1)

下面列舉tag可能使用的部分場景

  • power_sleep_requested: 位於PMS.goToSleepNoUpdateLocked
  • power_screen_state:位於Notifer.handleEarlyInteractiveChange, handleLateInteractiveChange

三. EventLog完整語義分析

在源碼EventLogTags.java中,有大量類似的定義,那麼括號中數字是什麼含義呢? (以進程啓動爲例)

  1. 30014 am_proc_start (User|1|5),(PID|1|5),(UID|1|5),(Process Name|3),(Type|3),(Component|3)

am_proc_start之後緊跟着的幾個括號,其中括號裏的內容格式如下:

  1. (<name>|data type[|data unit])
  2. (<名字>|數據類型[|數據單位])

那麼(User|1|5) ==> 名字爲User, 數據類型爲1,數據單位爲5,下面再來看看數據類型數據單位

3.1 數據類型

  • 1: int
  • 2: long
  • 3: string
  • 4: list

數據類型中int和string用得最多.

3.2 數據單位

  • 1: Number of objects(對象個數)
  • 2: Number of bytes(字節數)
  • 3: Number of milliseconds(毫秒)
  • 4: Number of allocations(分配個數)
  • 5: Id
  • 6: Percent(百分比)

3.3 實例解析

有了前面的準備知識,再來完整的看看如下語句:

  1. am_proc_start (User|1|5),(PID|1|5),(UID|1|5),(Process Name|3),(Type|3),(Component|3)
  2. am_proc_start: [0,9227,10002,com.android.browser,content provider,com.android.browser/.provider.BrowserProvider2]

含義如下:

進程啓動: UserId=0, pid=9227, uid=10002, ProcessName=com.android.browser, 數據類型=ContentProvider, 組件=com.android.browser/.provider.BrowserProvider2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章