2024年终总结--开发十年,人生四十
因为兴趣所以选择,因为选择所以坚持! 时间过得真快,2024年马上就要结束了,回想自己从事软件开发行业已经有十年时间了。这十年时间对于一个人的人生不算短,这飞逝十年使我的事业发生了很大转变。借着这入行开发十年的日子,以及明年将进入40岁的年纪,我觉得应该总结一下这十年自己的经历、收获,以及未来的规划和感触。 十一年前,我28岁,放弃大学所学,跟随兴趣,开始转向学习一个全新的方向 – Android开发。 十年前我正式转入了这个完全陌生、前途未知的行业。 关于博客八年前我开通了自己的博客[墨香博客],并写了转行以来第一个简单的总结(https://codemx.cn/about/),虽然这篇总结很短,但也曾鼓励过一些想学开发又觉得年龄大的网友。 关于我的博客,主要内容如下: 文章写的不多,至少我个人感觉是这样,而且因为一些原因一度停止更新,但也有一些文章帮助了一些同行和朋友: 墨香带你学Launcher系列, Android...
ANR-实例分析-Waiting for Available buffer
这章介绍两个实例,trace堆栈信息有区别,但是原因都是一样的。 实例一trace信息: 123456789101112131415161718192021222324252627282930313233343536373839----- pid 2340 at 2024-07-08 06:18:31.403216261+0800 -----Cmd line: com.android.launcherBuild fingerprint: 'xxx/release-keys'ABI: 'arm64'Build type: optimizedsuspend all histogram: Sum: 778.060ms 99% C.I. 5.193us-3305.192us Avg: 112.778us Max: 49558usDALVIK THREADS (54):"main" prio=5 tid=1 Native | group="main" sCount=1 ucsCount=0...
ANR-实例分析-负载过高
负载过高通常分为系统负载过高,应用负载过高。在第一节ANR-分类以及分析流程中的分析流程中有负载的判定条件和流程,这里不在贴了,可以直接去对应章节查看。 我们先看一下系统负载过高的实例。 首先还是先看trace信息: 123456789101112131415161718192021222324252627282930----- pid 2135 at 2024-04-07 03:13:49.397317152+0800 -----Cmd line: com.android.launcherBuild fingerprint: 'xxx/release-keys'ABI: 'arm64'Build type: optimizedsuspend all histogram: Sum: 1.164s 99% C.I. 20.542us-4088.026us Avg: 122.869us Max: 225691usDALVIK THREADS (67):"main" prio=5 tid=1 Native |...
ANR-实例分析-死锁
死锁是一种线程同步问题,指两个或多个线程在执行过程中由于相互等待对方释放资源,导致它们永远无法继续执行下去的现象。 一般死锁满足下面四个条件: 互斥条件:一个资源每次只能被一个线程占用。 持有并等待条件:一个线程已经持有至少一个资源,同时又请求新的资源,但该资源已被其他线程占用。 不可剥夺条件:线程已获得的资源在未使用完成之前,不能被其他线程强行剥夺。 循环等待条件:存在一个线程等待链,链中每个线程都在等待下一个线程所持有的资源。 实例由于涉及公司的代码包名,我进行了替换,其他都是真实信息: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960----- pid 2298 at 2024-08-28 21:09:32.901621896+0800 -----Cmd line: com.android.launcherBuild fingerprint:...
ANR-实例分析-Binder
根据惯例,先看trace 1234567891011121314151617181920212223242526272829303132333435363738394041424344----- pid 2378 at 2024-07-02 10:14:12.7494796958+0800 -----Cmd line: com.android.launcherBuild fingerprint: 'xxx/release-keys'ABI: 'arm64'Build type: optimizedsuspend all histogram: Sum: 5.532ms 99% C.I. 2us-2958.079us Avg: 83.818us Max: 4255usDALVIK THREADS (52):"main" prio=5 tid=1 Native | group="main" sCount=1 ucsCount=0 flags=1 obj=0x77bd5fb8...
ANR-实例分析-启动应用被杀
上一个ANR实例分析中有个关键信息:Looper: Slow dispatch took 10578ms main,可以看到主线程消息耗时比较多,导致ANR,这里有个问题需要再说一下,就是这个慢是系统导致的还是应用导致的,需要对log进行分析,需要看对应进程是哪些,有没有一直有个相同的进程在执行,如果没有,该关键信息的log又很多说明是系统慢了,需要系统分析,否则需要找到对应的应用进行分析。 这节继续分析ANR实例,应用被杀导致发生ANR。 trace1234567891011121314151617181920212223242526----- pid 2345 at 2024-10-23 08:45:43.412217011+0800 -----Cmd line: com.android.launcherBuild fingerprint: 'xxxP:user/release-keys'ABI: 'arm64'Build type: optimizedDebug Store: 1,0,147313907::suspend all...
ANR-实例分析-Input dispatching timed out
上一篇中也介绍了Input dispatching timed out的ANR,不过和这篇不同,这篇介绍另外一种情况。 其实Input dispatching timed out有两种类型, Input dispatching timed out (Application does not have a focused window) Input dispatching timed out((server) is not responding. Waited 5002ms for FocusEvent(hasFocus=false)) 一个是没有焦点窗口类型的ANR,一个是server没有相应的ANR,这两个类型是不一样的。 第一步:看trace 123456789101112131415161718192021222324----- pid 3450 at 2024-07-20 15:00:45.488171976+0800 -----Cmd line: com.android.launcherBuild fingerprint: ...ABI:...
ANR-实例分析-启动应用失败
前面四章介绍了ANR分类,分析流程,trace信息分析,Event log分析,Logcat分析,这些都是ANR分析的基础知识,以及分析问题的关键信息,熟练掌握以上信息才能让ANR分析尽可能又快又准确。 这章开始分析一些我在开发中遇到的一些ANR实例,通过总结这些实例的分析流程以及一些关键信息,帮助我们对ANR有更多的了解。 这里我们再重复贴一次分析流程: 首先看trace信息: 12345678910111213141516171819202122232425----- pid 2758 at 2024-05-30 12:15:49.504759099+0800 -----Cmd line: com.android.launcherBuild fingerprint: 'xxxxxxxx:user/release-keys'ABI: 'arm64'Build type: optimizedsuspend all histogram: Sum: 1.340s 99% C.I. 2.663us-6123.885us Avg:...
ANR-分析之基础知识介绍:logcat
前面介绍了分析ANR的基础知识:trace信息和event log,这一章继续介绍ANR分析需要的基础:logcat(main_log)。 logcat包含很多信息,系统预设的一些log信息,还有应用自己添加的一些log信息,这些信息很多,分析ANR很多时候需要分析Logcat信息,比如Looper信息,AnrManager信息,WindowManager信息等等。这些信息会辅助我们分析发生的ANR是哪些原因导致的。 首先是AnrManager信息(下面是我过滤出来的信息,因此会带有行号): 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697//...
Google-Jetpack-Compose-Animation
Developer Source Animations in Compose | Jetpack Compose | Android Developers Choose an animation API | Jetpack Compose | Android Developers Quick guide to Animations in Compose | Jetpack Compose | Android Developers Animation modifiers and composables | Jetpack Compose | Android Developers Value-based animations | Jetpack Compose | Android Developers Animated vector images in Compose | Jetpack Compose | Android Developers Advanced animation example: Gestures | Jetpack Compose ...