专栏名称: 安卓开发精选
伯乐在线旗下账号,分享安卓应用相关内容,包括:安卓应用开发、设计和动态等。
目录
相关文章推荐
鸿洋  ·  Android anr排查之sp卡顿 ·  昨天  
郭霖  ·  从源码到定制:全面解析 Android ... ·  5 天前  
鸿洋  ·  卡顿监测的方方面面 ·  5 天前  
郭霖  ·  HarmonyOS ... ·  1 周前  
郭霖  ·  HarmonyOS ... ·  1 周前  
51好读  ›  专栏  ›  安卓开发精选

Android EventLog含义

安卓开发精选  · 公众号  · android  · 2016-10-04 10:10

正文

(点击上方公众号,可快速关注)


来源:伯乐在线专栏作者 - gityuan

链接:http://android.jobbole.com/84827/

点击 → 了解如何加入专栏作者


一. 概述


在调试分析Android的过程中,比较常用的地查看EventLog,非常简洁明了地展现当前Activity各种状态,当然不至于此,比如还有window的信息。那么本文就列举以下am相关的tags含义。


本文涉及的源码类有EventLog.java, EventLogTags.java,另外tags格式的定义位于文件/system/etc/event-log-tags。


如果在终端输入:


logcat -b events


那么会输出大量类似这样的信息:


06-01 13:44:55.518  7361  8289 I am_create_service: [0,111484394,.StatService,10094,7769]

06-01 13:44:55.540  7361  8343 I am_proc_bound: [0,3976,com.android.providers.calendar]

06-01 13:44:55.599  7361  8033 I am_create_service: [0,61349752,.UpdateService,10034,1351]

06-01 13:44:55.625  7361  7774 I am_destroy_service: [0,61349752,1351]

...


通过字面意思,就能得到不少信息量,比如am_create_service,创建service,但是后面括号中内容的具体含义,其实有很高的价值。 接下来通过一张表格来展示含义。


二. EventLog


2.1 AM


NumTagName格式功能
30001am_finish_activityUser,Token,TaskID,ComponentName,Reason
30002am_task_to_frontUser,Task
30003am_new_intentUser,Token,TaskID,ComponentName,Action,MIMEType,URI,Flags
30004am_create_taskUser ,Task ID
30005am_create_activityUser ,Token ,TaskID ,ComponentName,Action,MIMEType,URI,Flags
30006am_restart_activityUser ,Token ,TaskID,ComponentName
30007am_resume_activityUser ,Token ,TaskID,ComponentName
30008am_anrUser ,pid ,Package Name,Flags ,reasonANR
30009am_activity_launch_timeUser ,Token ,ComponentName,time
30010am_proc_boundUser ,PID ,ProcessName
30011am_proc_diedUser ,PID ,ProcessName
30012am_failed_to_pauseUser ,Token ,Wanting to pause,Currently pausing
30013am_pause_activityUser ,Token ,ComponentName
30014am_proc_startUser ,PID ,UID ,ProcessName,Type,Component
30015am_proc_badUser ,UID ,ProcessName
30016am_proc_goodUser ,UID ,ProcessName
30017am_low_memoryNumProcessesLru
30018am_destroy_activityUser ,Token ,TaskID,ComponentName,Reason
30019am_relaunch_resume_activityUser ,Token ,TaskID,ComponentName
30020am_relaunch_activityUser ,Token ,TaskID,ComponentName
30021am_on_paused_calledUser ,ComponentName
30022am_on_resume_calledUser ,ComponentName
30023am_killUser ,PID ,ProcessName,OomAdj ,Reason杀进程
30024am_broadcast_discard_filterUser ,Broadcast ,Action,ReceiverNumber,BroadcastFilter
30025am_broadcast_discard_appUser ,Broadcast ,Action,ReceiverNumber,App
30030am_create_serviceUser ,ServiceRecord ,Name,UID ,PID
30031am_destroy_serviceUser ,ServiceRecord ,PID
30032am_process_crashed_too_muchUser ,Name,PID
30033am_drop_processPID
30034am_service_crashed_too_muchUser ,Crash Count,ComponentName,PID
30035am_schedule_service_restartUser ,ComponentName,Time
30036am_provider_lost_processUser ,Package Name,UID ,Name
30037am_process_start_timeoutUser ,PID ,UID ,ProcessNametimeout
30039am_crashUser ,PID ,ProcessName,Flags ,Exception,Message,File,LineCrash
30040am_wtfUser ,PID ,ProcessName,Flags ,Tag,MessageWtf
30041am_switch_userid
30042am_activity_fully_drawn_timeUser ,Token ,ComponentName,time
30043am_focused_activityUser ,ComponentName
30044am_home_stack_movedUser ,To Front ,Top Stack Id ,Focused Stack Id ,Reason
30045am_pre_bootUser ,Package
30046am_meminfoCached,Free,Zram,Kernel,Native内存
30047am_pssPid, UID, ProcessName, Pss, Uss进程


下面列举tag可能使用的部分场景:


  • am_low_memory:位于AMS.killAllBackgroundProcesses或者AMS.appDiedLocked,记录当前Lru进程队列长度。

  • am_pss:位于AMS.applyOomAdjLocked或者AMS.requestPssLocked

  • 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


2.2 Power


NumTagName格式功能
2722battery_levellevel, voltage, temperature
2723battery_statusstatus,health,present,plugged,technology
2730battery_dischargeduration, minLevel,maxLevel
2724power_sleep_requestedwakeLocksCleared唤醒锁数量
2725power_screen_broadcast_sendwakelockCount
2726power_screen_broadcast_doneon, broadcastDuration, wakelockCount
2727power_screen_broadcast_stopwhich,wakelockCount系统还没进入ready状态
2728power_screen_stateoffOrOn, becauseOfUser, totalTouchDownTime, touchCycles
2729power_partial_wake_statereleasedorAcquired, 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


2.3 Notification


|Num|TagName|格式|功能| |—|—|—|


三. EventLog完整语义分析


在源码EventLogTags.java中,有大量类似的定义,那么括号中数字是什么含义呢? (以进程启动为例)


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

(Type|3),(Component|3)


格式:


(|data type[|data unit])

(名字>|数据类型[|数据单位])


数据类型:


  • 1: int

  • 2: long

  • 3: string

  • 4: list


数据类型中int和string用得最多.


数据单位:


  • 1: Number of objects(对象个数)

  • 2: Number of bytes(字节数)

  • 3: Number of milliseconds(毫秒)

  • 4: Number of allocations(分配个数)

  • 5: Id

  • 6: Percent(百分比)


实例解析:


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

am_proc_start: [0,9227,10002,com.android.browser,content provider,com.android.browser/.provider.BrowserProvider2]


含义 ==> 进程启动: pid=9227,uid=10002, 进程名=com.android.browser, 类型ContentProvider,相应组件=com.android.browser/.provider.BrowserProvider2


专栏作者简介( 点击 → 加入专栏作者 


gityuan:Android全栈工程师:上至能写App,中间能改framework和Native代码,下至能调驱动,全栈能解决性能与稳定性。(新浪微博:@Gityuan)

打赏支持作者写出更多好文章,谢谢!



 关注「安卓开发精选

看更多精选安卓技术文章
↓↓↓