Launch timeout has expired, giving up wake lock

前几天分析一个APP崩溃的问题,APP启动之后跟了几秒钟然后突然挂掉了,打印里面有Launch timeout has expired, giving up wake lock这个LOG,网是查了下说是启动超时.但是一直不太理解,然后把startactivity流程仔细看了一遍,大概看明白了什么情况下会出现这个问题.
1.在activitystack.java文件里面
函数resumeTopActivityInnerLocked是拉Activity的真正入口地方,在这个函数里面会
在这里插入图片描述
在这里插入图片描述
这两个拉起activity的入口基本都是直接或间接在这个函数里面拉起来的。在开始拉的时候会判断目前有没有Activity正处于Resumeing状态
如果有就停止它,并拉起一个10S的Delay(相当定时器)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里就是延迟10S,发一个TIMEOUT的信息。当10S内被PAUSE的程序执行完成后会remove这个消息,没有的话就倒霉了。那么mResumedActivity这个对象变量是哪里被赋值哪里又被清空呢。在正常流程下,在resumeTopActivityInnerLocked函数里面,要拉起activity的时候(无论是LAUNCHER还是RESUME)就会为这个对象赋值,resumeTopActivityInnerLocked->setResumedActivityLocked 如图
在这里插入图片描述哪又是什么时候清空的,在程序拉起完成之后清空的,如下图
在这里插入图片描述在这里插入图片描述finishActivity->requestFinishActivityLocked->finishActivityLocked->finishCurrentActivityLocked.
那么就很清楚了,当应用启动时判断当前有没有正在启动的activity,如果有就停止它并拉起一个10S的计时器。停止成功就取消计时器。继续执行,把当前招待设置成正在启动的activity并开始拉activity,拉成功之后就把正在启动的变量设置为NULL。那么问题来了,如果你上个APP启动没完成你马上又启动自己的APP,如果那个APP oncreate onresume onpause写的很乱并阻塞,结果你自己写的APP挂了,不是很倒霉?

mysql slow_launch_time是MySQL服务器配置选项之一,它用于设置服务器在启动过程中用于判断一个线程是否慢启动的时间阈值。 当MySQL服务器启动时,会创建很多线程来处理客户端连接和任务请求。然而,在某些情况下,这些线程可能会由于一些原因而启动缓慢,例如线程池太小、高负载等。这时,可以设置slow_launch_time参数来控制是否将线程标记为慢启动线程。 slow_launch_time参数的单位是秒,默认值为2。当一个线程的创建时间超过slow_launch_time设置的值时,该线程被认为是慢启动线程。慢启动线程将被计入slow_launch_threads,并且会导致服务器记录相应的警告日志。 通过合理设置slow_launch_time,可以帮助我们在服务器启动过程中及时发现慢启动线程,从而可以进一步优化配置、调整线程池大小或者优化应用程序代码,提高服务器的整体性能和响应速度。 需要注意的是,根据实际需求和系统配置,可以适当调整slow_launch_time的值。如果系统启动过程中有较多的慢启动线程,可以适当增大该参数的值,以免频繁记录警告信息;如果系统启动较快,慢启动线程数量可忽略,可以适当减小该参数的值,以提高敏感度。 总之,MySQL的slow_launch_time参数是用来设置服务器慢启动线程的时间阈值,通过合理配置该参数可以帮助我们及时发现和处理慢启动线程,提高服务器的性能和响应速度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bruk_spp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值