<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_35770839的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_35770839</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_35770839]]></copyright><item><title><![CDATA[开机启动优化——日志篇]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/166371750</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/166371750</guid><author>qq_35770839</author><pubDate>Wed, 23 Sep 2026 10:03:38 +0800</pubDate><description><![CDATA[开机优化的日志抓取和日志分析]]></description><category></category></item><item><title><![CDATA[蓝牙音乐静音实现]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/151759638</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/151759638</guid><author>qq_35770839</author><pubDate>Tue, 14 Apr 2026 22:37:58 +0800</pubDate><description><![CDATA[在车机开发过程中，有一些静音的需求，例如我们车机在播放QQ音乐时，同时手机又开始播放蓝牙音乐，就可能会出现混音，或者抢占Q音的播放，导致问题，因此在很多场景下是需要让手机正常播放，但声音是不会在车机端出来，确保音乐是静音的。蓝牙音乐静音的实现方案从上图也就非常明了，当前的安卓系统主要是在音频数据上报到 SNK 端的蓝牙协议栈时不进行保存，从而没有解码后的音频数据送入安卓多媒体系统 AudioTrack 来实现的。]]></description><category></category></item><item><title><![CDATA[Fragment使用中的优化]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/148905534</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/148905534</guid><author>qq_35770839</author><pubDate>Wed, 25 Jun 2025 20:07:08 +0800</pubDate><description><![CDATA[commit() + isStateSaved 是处理 Fragment 事务提交时机的 安全模式，优先于 commitAllowingStateLoss。适用场景：所有动态提交 Fragment 事务的场合（尤其是异步回调、用户交互等不确定时机）。本质：通过前置检查避免 IllegalStateException 和状态丢失，兼顾稳定性和用户体验。]]></description><category></category></item><item><title><![CDATA[kotlin 协程]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/145472842</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/145472842</guid><author>qq_35770839</author><pubDate>Thu, 06 Feb 2025 14:19:20 +0800</pubDate><description><![CDATA[a、协程日异步逻辑同步化，杜绝回调地狱b、协程最核心的点就是，函数或者一段程序能够被挂起，稍后再在挂起的位置恢复协程的其他说法：1、协程就是线程框架，非阻塞式的挂起2、有点像轻量级的线程。]]></description><category></category></item><item><title><![CDATA[记录一次内存负载过大的问题分析]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/144890008</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/144890008</guid><author>qq_35770839</author><pubDate>Sat, 18 Jan 2025 17:07:42 +0800</pubDate><description><![CDATA[内存负载会受到多个因素影响，如动画效果等旧版本的内存情况：新版本的内存情况。]]></description><category></category></item><item><title><![CDATA[通Perfetto解析trace日志，分析启动速度慢的问题]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/144929018</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/144929018</guid><author>qq_35770839</author><pubDate>Sat, 04 Jan 2025 15:32:12 +0800</pubDate><description><![CDATA[首先打开trace的文件，然后标记对应的应用，以及launch应用，以及启动应用的动画animator可以看到如下：分析如下：1.第一个是启动的应用usb，第二个是usb的运行情况，第三行数是usb启动的动画，第四行是launcher的启动动画，后面就是launcher的点击运行的主线程。2、我们可以根据动画效果可以看到一开始是launcher的启动动画，然后是usb的启动动画显示。]]></description><category></category></item><item><title><![CDATA[【Android 内存优化】Android Profiler 工具常用功能 (内存泄漏查看)]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/142174740</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/142174740</guid><author>qq_35770839</author><pubDate>Thu, 12 Sep 2024 18:30:16 +0800</pubDate><description><![CDATA[Memory Profiler 是 Android Profiler 中的一个组件，它可以帮助你识别内存泄漏和内存溢出，从而导致存根、冻结甚至应用程序崩溃。它显示了应用程序内存使用的实时图，让你捕获堆转储、强制垃圾收集。]]></description><category></category></item><item><title><![CDATA[【Android】ANR日志分析]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/136508950</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/136508950</guid><author>qq_35770839</author><pubDate>Wed, 06 Mar 2024 17:57:56 +0800</pubDate><description><![CDATA[很多开发者认为，ANR就是耗时操作导致，全部是app应用层的问题。实际上，线上环境大部分ANR由系统原因导致。]]></description><category></category></item><item><title><![CDATA[Framework开发注意事项]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/132156212</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/132156212</guid><author>qq_35770839</author><pubDate>Mon, 07 Aug 2023 22:21:06 +0800</pubDate><description><![CDATA[framework-res.apk：android系统资源库framework.jar：android的sdk中核心代码services.jar：框架层服务端的编译后jar包。]]></description><category></category></item><item><title><![CDATA[线程原理-java]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/132034274</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/132034274</guid><author>qq_35770839</author><pubDate>Tue, 01 Aug 2023 08:05:38 +0800</pubDate><description><![CDATA[1、corePoolSize（线程池基本大小）：当向线程池提交一个任务时，若线程池已创建的线程数小于corePoolSize，即便此时存在空闲线程，也会通过创建一个新线程来执行该任务，直到已创建的线程数大于或等于corePoolSize时，（除了利用提交新任务来创建和启动线程（按需构造），也可以通过 prestartCoreThread() 或 prestartAllCoreThreads() 方法来提前启动线程池中的基本线程。这个线程对象也许是活的，但是，它已经不是一个单独执行的线程。]]></description><category></category></item><item><title><![CDATA[Android- 启动模式]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/132031212</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/132031212</guid><author>qq_35770839</author><pubDate>Tue, 01 Aug 2023 08:03:21 +0800</pubDate><description><![CDATA[​]]></description><category></category></item><item><title><![CDATA[bind源码解析]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/132031318</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/132031318</guid><author>qq_35770839</author><pubDate>Tue, 01 Aug 2023 08:03:05 +0800</pubDate><description><![CDATA[ServiceManage负责管理所有的ServiceManager服务，在APP启动的时候，会调用电量，媒体等多个服务，都是通过binder来进行调用的，所有的服务端和客户端通信都是通过ServiceManager来注册和获取服务的。我们自动生成的aidl和系统的服务是一一对应的。1、客户端如何获取到AIDL的？]]></description><category></category></item><item><title><![CDATA[Android-Service -- 保活方案]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/132031480</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/132031480</guid><author>qq_35770839</author><pubDate>Tue, 01 Aug 2023 08:02:53 +0800</pubDate><description><![CDATA[3.ON_AFTER_RELEASE：如果释放WakeLock的时候屏幕处于亮着的状态，则在释放WakeLock之后让屏幕再保持亮一小会。3.ON_AFTER_RELEASE：如果释放WakeLock的时候屏幕处于亮着的状态，则在释放WakeLock之后让屏幕再保持亮一小会。在发送特定系统事件时，系统会发出广播，通过在AndroidManifest中静态注册对应的广播监听，即可在发送响应事件时拉活。1、前台进程：当前运行的进程，除非APP的内存超过系统给定的最大内存，导致OOM才会被杀掉。]]></description><category></category></item><item><title><![CDATA[setContentView 流程]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/132028440</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/132028440</guid><author>qq_35770839</author><pubDate>Tue, 01 Aug 2023 08:02:40 +0800</pubDate><description><![CDATA[PhoneWindow.setContentView — 主要目的  创建 DecorView 拿到 Content// 创建 DecorView 拿到 mContentParenta、先获取对应属性的设置//  R.layout.screen_simple --》 添加到 DecorView（FrameLayout）//  R.layout.activity_main 渲染到 mContentParent。]]></description><category></category></item><item><title><![CDATA[Android-APP启动流程]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/132031567</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/132031567</guid><author>qq_35770839</author><pubDate>Tue, 01 Aug 2023 08:02:21 +0800</pubDate><description><![CDATA[组件状态管理：包括四大组件的开启，关闭等一系列操作。如startActivity,startActivityAndWait,activityPaused,startService,stopService,removeContentProvider等组件状态查询：查询组件当前运行等情况。如getCallingActivity,getService等Task相关：包括removeTask,removeSubTask,moveTaskBackwards,moveTaskToFront等。]]></description><category></category></item><item><title><![CDATA[Jetpack -LiveData和dataBinding]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/132031645</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/132031645</guid><author>qq_35770839</author><pubDate>Tue, 01 Aug 2023 08:02:00 +0800</pubDate><description><![CDATA[LivaData通过observe()添加与LifecycleOwner绑定的观察者；在considerNotify()先用2个if判断出被观察者对应的activity状态是否为显示发送通知onChanged（）被调用；使用setValue()、postValue()更新数据时会通知回调所有的观察者。反射问题解决： 享学课堂/Jetpack技术之-数据绑定与ViewModel。]]></description><category></category></item><item><title><![CDATA[Android Okhttp源码和retofit]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/132031673</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/132031673</guid><author>qq_35770839</author><pubDate>Tue, 01 Aug 2023 08:00:55 +0800</pubDate><description><![CDATA[好了，最后补上这个拦截器networkInterceptors，它也是一个自定义拦截器，位于CallServerInterceptor之前，属于倒数第二个拦截器。那为什么OkHttp在有了一个自定义拦截器的前提下又提供了一个拦截器呢？可以发现，这个拦截器的位置是比较深的位置，处在发送数据的前一刻，以及收到数据的第一刻。这么敏感的位置，决定了通过这个拦截器可以看到更多的信息，比如：请求之前，OkHttp处理之后的请求报文数据，比如增加了各种header之后的数据。]]></description><category></category></item><item><title><![CDATA[网络基础 - 协议概念]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/132031769</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/132031769</guid><author>qq_35770839</author><pubDate>Tue, 01 Aug 2023 08:00:38 +0800</pubDate><description><![CDATA[3、C类地址：网络id：前两位固定为110，第一部分是192~223，第二、三部分是 0~255 ，一二三部分为网络id，四部分为主机id，最大主机数是254个。2、B类地址：网络id：前两位固定为10，第一部分是128~191，第二部分是 0~255 一二部分为网络id，三四部分为主机id。默认情况下，A类子网掩码的位数是8，B类是16位，C类是24为。乘法减少：只要网络出现拥塞，把ssthresh减半，于此同时，执行慢开始算法（cwnd又恢复到初始值）]]></description><category></category></item><item><title><![CDATA[C语言和C++学习笔记]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/132031890</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/132031890</guid><author>qq_35770839</author><pubDate>Tue, 01 Aug 2023 07:59:54 +0800</pubDate><description><![CDATA[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dNwnPFKX-1690813594915)(https://note.youdao.com/yws/res/3344/WEBRESOURCE70978b000481820b5014a2e91403619b)]// malloc/free是一套  不调用构造函数 与 析构函数 【C的范畴，虽然不推荐，但是也是可以的】1、浅拷贝，每次拷贝会生成新的地址，但新旧地址都指向同一个内存空间，所以释放时如果重复执行就会报错。]]></description><category></category></item><item><title><![CDATA[Android - hangdle框架]]></title><link>https://blog.youkuaiyun.com/qq_35770839/article/details/132027491</link><guid>https://blog.youkuaiyun.com/qq_35770839/article/details/132027491</guid><author>qq_35770839</author><pubDate>Mon, 31 Jul 2023 17:50:13 +0800</pubDate><description><![CDATA[线程本地存储区（Thread Local Storage，简称为TLS），每个线程都有自己的私有的本地存储区域，不同线程之间彼此不能访问对方的TLS区域。在message初始化时就会创建一个looper，looper初始化会执行和创建epoll的一些函数，然后进行监听fd的方式来形成阻塞。next： 先判断是否有消息屏障，有就执行异步消息，然后则执行正常的消息队列，最后当消息队列没有消息，并且空闲时，就回执行会执行ideleHandler。此时我们对这些流的操作都是(复杂度降低到了O(1))有意义的。]]></description><category></category></item></channel></rss>