framework层的event_log分析

一、查看log的方向和方式

涉及到Activity生命周期问题时,主要是查看event log (logcat -b events | grep am_)
涉及到某个生命周期(一般指am_on_xxx)耗时时,结合“Slow Looper main”查看是哪个消息耗时,app 端log的形式:am_on_xxx_called:[userId,className,reason,duration],duration是miui加的

二、常见场景的log
1、正常启动一个activity

system_server

05-29 18:17:41.616 1898 4358 I am_create_activity: [0,199662628,22,com.miui.gallery/.activity.HomePageActivity,android.intent.action.MAIN,NULL,NULL,270532608]
05-29 18:17:41.693 1898 4358 I am_restart_activity: [0,199662628,22,com.miui.gallery/.activity.HomePageActivity,24197]
// minimalResumeActivityLocked 代表从该方法调用过来
05-29 18:17:41.695 1898 4358 I am_set_resumed_activity: [0,com.miui.gallery/.activity.HomePageActivity,minimalResumeActivityLocked]

app 进程,最后两个分别是reason和时间

// 这三个reason组合的onCreate,onStart,onResume周期在app端是在同一个消息内被执行的。即这三个周期有什么延迟问题,均为app端问题。
05-29 18:17:42.400 24197 24197 I am_on_create_called: [0,com.miui.gallery.activity.HomePageActivity,performCreate,125]
05-29 18:17:42.402 24197 24197 I am_on_start_called: [0,com.miui.gallery.activity.HomePageActivity,handleStartActivity,0]
// RESUME_ACTIVITY 代表由ResumeActivityItem调用过来的,这种为system_server触发的且要求activity最终状态为resumed
05-29 18:17:42.404 24197 24197 I am_on_resume_called: [0,com.miui.gallery.activity.HomePageActivity,RESUME_ACTIVITY,1]
2、正常结束finish一个Activity

system_server

// reason代表是app触发的finish
05-29 18:28:16.495 1898 4358 I am_finish_activity: [24197,199662628,22,com.miui.gallery/.activity.HomePageActivity,app-request] 
05-29 18:28:16.500 1898 4358 I am_pause_activity: [24197,199662628,com.miui.gallery/.activity.HomePageActivity,userLeaving=false]
// finishCurrentActivityLocked 代表加入stoppping列表的原因
05-29 18:28:16.505 1898 2042 I am_add_to_stopping: [0,199662628,com.miui.gallery/.activity.HomePageActivity,finishCurrentActivityLocked]
// 代表destroy的时机是activity idle的时候,不是立刻destroy
05-29 18:28:17.048 1898 2105 I am_destroy_activity: [24197,199662628,22,com.miui.gallery/.activity.HomePageActivity,finish-imm:activityIdleInternalLocked]

app端

// LIFECYCLER_STOP_ACTIVITY 表示该onStop是中间流程,因为初始状态是onPause,最终状态是onDestroy,会走完之间的流程,一般这种周期reason会带有LIFECYCLER前缀
05-29 18:28:16.504 24197 24197 I am_on_paused_called: [0,com.miui.gallery.activity.HomePageActivity,performPause,0]
05-29 18:28:17.079 24197 24197 I am_on_stop_called: [0,com.miui.gallery.activity.HomePageActivity,LIFECYCLER_STOP_ACTIVITY,1]
05-29 18:28:17.102 24197 24197 I am_on_destroy_called: [0,com.miui.gallery.activity.HomePageActivity,performDestroy,2]
3、activity之间切换

如下是前一个activity的生命周期,后一个生命周期见1 ,具体时序图见Activity 的启动流程大概是:
在这里插入图片描述attention:
下一个activity onResume执行完后在主线程处于idle的时候通知system_server去stop上一个activity,如果主线程在onResume之后一直很忙,会导致onStop执行延迟,直到10s超时后system_server端主动去执行stop

system_server

05-29 15:44:37.540 1595 2425 I am_pause_activity: [5045,41736446,com.miui.gallery/.activity.HomePageActivity,userLeaving=true]
// 代表加入stopping列表的原因为要求activity不可见
05-29 15:46:41.052 1595 2425 I am_add_to_stopping: [0,41736446,com.miui.gallery/.activity.HomePageActivity,makeInvisible]
05-29 15:46:41.598 1595 1691 I am_stop_activity: [0,41736446,com.miui.gallery/.activity.HomePageActivity]

app 端

// onStop的reason STOP_ACTIVITY_ITEM 表示StopActivityItem调用
05-29 15:44:37.543 5045 5045 I am_on_paused_called: [0,com.miui.gallery.activity.HomePageActivity,performPause,0]
05-29 15:46:41.615 5045 5045 I am_on_stop_called: [0,com.miui.gallery.activity.HomePageActivity,STOP_ACTIVITY_ITEM,0]
4、熄屏时resumed activity的变化
06-10 14:39:36.417  1551  1604 I am_pause_activity: [14045,192133053,com.miui.gallery/.activity.HomePageActivity,userLeaving=false]
06-10 14:39:36.423 14045 14045 I am_on_paused_called: [0,com.miui.gallery.activity.HomePageActivity,performPause,1]
06-10 14:39:36.463  1551  1593 I am_stop_activity: [0,192133053,com.miui.gallery/.activity.HomePageActivity]
// 一般都是看onStop的原因为sleeping
06-10 14:39:36.470 14045 14045 I am_on_stop_called: [0,com.miui.gallery.activity.HomePageActivity,sleeping,0]
5、唤醒屏幕
// 主要看onRestart和onStart的reason为handleSleeping,注意的是有的情况是不会走onResume的
06-10 14:44:42.829  1760  1915 I am_set_resumed_activity: [0,com.miui.gallery/.activity.HomePageActivity,resumeTopActivityInnerLocked]
06-10 14:44:42.830 16517 16517 I am_on_restart_called: [0,com.miui.gallery.activity.HomePageActivity,handleSleeping,0]
06-10 14:44:42.831  1760  1915 I am_resume_activity: [0,201508124,34,com.miui.gallery/.activity.HomePageActivity,16517]
06-10 14:44:42.832 16517 16517 I am_on_start_called: [0,com.miui.gallery.activity.HomePageActivity,handleSleeping,1]
06-10 14:44:42.872 16517 16517 I am_on_resume_called: [0,com.miui.gallery.activity.HomePageActivity,RESUME_ACTIVITY,0]
经典案例
1.onStop/onDestory延迟执行
// 这个是正常的按下返回键返回上个页面的流程
03-24 09:57:27.560 1563 2759 I am_finish_activity: [3044,40142426,32721,com.android.settings/.Settings$PageLayoutActivity,app-request]
03-24 09:57:27.561 1563 2759 I am_pause_activity: [3044,40142426,com.android.settings/.Settings$PageLayoutActivity,userLeaving=false]
03-24 09:57:27.564 3044 3044 I am_on_paused_called: [0,com.android.settings.Settings$PageLayoutActivity,performPause,1]*
03-24 09:57:27.566 1563 4735 I am_set_resumed_activity: [0,com.android.settings/.SubSettings,resumeTopActivityInnerLocked]
03-24 09:57:27.567 1563 4735 I am_resume_activity: [0,178668836,32721,com.android.settings/.SubSettings,3044]
03-24 09:57:27.572 3044 3044 I am_on_resume_called: [0,com.android.settings.SubSettings,RESUME_ACTIVITY,1]

// 上个PageLayoutActivity 的destroy回调是在下个SubSettings onResume后将近10s才回调的,刚好是DESTROY_TIMEOUT_MSG 超时时间,说明app端onResume回调后10s内主线程都未处于idle状态
// 即主线程一直在执行消息,后面经调试发现是一个控件递归绘制一个drawable导致,即主线程一直在执行绘制消息
03-24 09:57:37.568 1563 1641 I am_destroy_activity: [3044,40142426,32721,com.android.settings/.Settings$PageLayoutActivity,finish-imm:activityIdleInternalLocked]
03-24 09:57:37.663 3044 3044 I am_on_stop_called: [0,com.android.settings.Settings$PageLayoutActivity,LIFECYCLER_STOP_ACTIVITY,1]*
03-24 09:57:37.663 3044 3044 I am_on_destroy_called: [0,com.android.settings.Settings$PageLayoutActivity,performDestroy,0]
2.onStart/onResume延迟执行
05-18 07:15:00.099 1000 1684 2700 I am_create_activity: [0,207685455,818,com.android.deskclock/.alarm.alert.AlarmAlertFullScreenActivity,NULL,NULL,NULL,277151744]
05-18 07:15:00.108 1000 1684 2700 I am_restart_activity: [0,207685455,818,com.android.deskclock/.alarm.alert.AlarmAlertFullScreenActivity,30177]
05-18 07:15:00.110 1000 1684 2700 I am_set_resumed_activity: [0,com.android.deskclock/.alarm.alert.AlarmAlertFullScreenActivity,minimalResumeActivityLocke
 
 
// 客户端的onCreate和onStart/onResume执行时间相差8s左右,鉴于客户端的LaunchActivityItem与ResumeActivityItem是同一个消息执行的,确定为客户端问题
05-18 07:15:00.288 10104 30177 30177 I am_on_create_called: [0,com.android.deskclock.alarm.alert.AlarmAlertFullScreenActivity,performCreate,8]
05-18 07:15:08.158 10104 30177 30177 I am_on_start_called: [0,com.android.deskclock.alarm.alert.AlarmAlertFullScreenActivity,handleStartActivity,0]
05-18 07:15:08.161 10104 30177 30177 I am_on_resume_called: [0,com.android.deskclock.alarm.alert.AlarmAlertFullScreenActivity,RESUME_ACTIVITY,2]
 
 
// 查找app主线程的log,查找可能的耗时原因,主线程调用IContentProvider的query接口耗时将近8s,确定原因
05-18 07:15:08.088 10104 30177 30177 W BpBinder: Slow Binder: BpBinder transact took 7742ms, interface=android.content.IContentProvider, code=1 oneway=false
EventLog标签
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 ,reason
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_memoryNumProcesses
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,Token,TaskID,ComponentName,Reason
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 ,ProcessName
30039am_crashUser ,PID ,ProcessName,Flags ,Exception,Message,File,Line
30040am_wtfUser ,PID ,ProcessName,Flags ,Tag,Message
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

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)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想了解关于在Spring Boot中如何配置外置的Log4j2日志记录器是吗?首先,您需要在您的Maven或Gradle构建文件中添加Log4j2的依赖项,并将配置文件(例如log4j2.xml或log4j2.properties)放置在您选择的位置(例如,您可以将其放置在项目根目录的config文件夹中)。然后,您需要在Spring Boot应用程序的Startup类中添加以下代码以使Log4j2配置生效: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.event.EventListener; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.util.Assert; @SpringBootApplication public class Application { @EventListener public void handleApplicationReadyEvent(ApplicationReadyEvent event) { ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] resources = resolver.getResources("classpath*:log4j2.xml"); Assert.isTrue(resources.length == 1, "log4j2.xml file must be present in the classpath"); System.setProperty("log4j.configurationFile", resources[0].getURI().toString()); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 这段代码将在应用程序启动时加载log4j2.xml配置文件,并将其设置为系统属性“log4j.configurationFile”。设置后,Log4j2将自动使用该文件配置应用程序的日志记录。此外,请确保在您的应用程序中使用了log4j2的日志记录API,例如通过以下方式: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyExampleClass { private static final Logger logger = LoggerFactory.getLogger(MyExampleClass.class); public void doSomething() { logger.debug("Hello world!"); } } ``` 希望这可以回答您的问题!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值