Android EventLog简介

在cmd终端上 输入 adb logcat -b events 会打印出EventLog信息

《Android EventLog简介》

二. EventLog

2.1 ActivityManager

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.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

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

三. EventLog完整语义分析

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

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

am_proc_start之后紧跟着的几个括号,其中括号里的内容格式如下:

(<name>|data type[|data unit])
(<名字>|数据类型[|数据单位])

那么(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 实例解析

有了前面的准备知识,再来完整的看看如下语句:

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] 

含义如下:

进程启动: UserId=0, pid=9227, uid=10002, ProcessName=com.android.browser, 数据类型=ContentProvider, 组件=com.android.browser/.provider.BrowserProvider2

events_log中搜索“am_finish_activity”, 可以判断到底是APP自行结束的(正常结束,后面有app-request字样),还是被其他进程强制结束的(force-stop)

    原文作者:lz强
    原文地址: https://blog.csdn.net/liu362732346/article/details/79883791
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞