<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[HUandroid的博客]]></title><description><![CDATA[观摩]]></description><link>https://blog.youkuaiyun.com/HUandroid</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; HUandroid]]></copyright><item><title><![CDATA[Android异常crash监听]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/143116624</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/143116624</guid><author>HUandroid</author><pubDate>Fri, 06 Dec 2024 17:06:04 +0800</pubDate><description><![CDATA[目前做的项目为座舱app，与智驾交互很多。如果遇到异常crash退出，会导致智驾域控的状态机不对，无法重置。所以要解决当前问题，需要在APP崩溃的时候发送重置信号，解决状态机不同步问题。综上：2个方案并行，可以解决应用进程Crash或者底层Crash的兜底方案，防止异常暴露。可以通过绑定服务来监听主进程是否死亡，配置：独立的远程进程。]]></description><category></category></item><item><title><![CDATA[Android 启动速度优化]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/126533493</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/126533493</guid><author>HUandroid</author><pubDate>Sun, 29 Jan 2023 10:49:03 +0800</pubDate><description><![CDATA[android启动优化，结合自己的经验，一点自我总结]]></description><category></category></item><item><title><![CDATA[android 媒体文件分区适配]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/122717769</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/122717769</guid><author>HUandroid</author><pubDate>Thu, 27 Jan 2022 17:30:35 +0800</pubDate><description><![CDATA[android 媒体文件分区适配
最近刚好有个需求做了媒体文件的分区适配，记录以下
官方文档地址：https://developer.android.com/guide/topics/data?hl=zh-cn
问题点
之前的下载文件都在/storage/emulated/0/android/data/pagename/file中，首先这个属于应用内部的文件系统，而且是不需要读写权限的申请的，它会跟随应用的卸载而删除。
由于Android Q文件存储机制修改成了沙盒模式，同时对应用内部的文件系统加强了访问控]]></description><category></category></item><item><title><![CDATA[android 协程基础(二)]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/119713541</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/119713541</guid><author>HUandroid</author><pubDate>Mon, 13 Sep 2021 22:35:12 +0800</pubDate><description><![CDATA[android 协程基础协程构建器launchasyncjoin组合并发协程的启动模式DEFAULTATOMICLAZYUNDISPATCHED
协程构建器
launch和async构建器
launch
返回一个Job并且不会附带任何结果值
async
返回一个Deferred，Deferred是一个Job，可以使用await()在一个延期的值上得到它的最终结果
eg:通过await()来获取结果
 GlobalScope.launch{
            val job1 = launch {
  ]]></description><category></category></item><item><title><![CDATA[android 协程基础（一）]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/119712082</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/119712082</guid><author>HUandroid</author><pubDate>Sun, 15 Aug 2021 14:33:11 +0800</pubDate><description><![CDATA[android 协程基础基础概念协程挂起和恢复挂起和阻塞调度器Dispatchers.MainDispatchers.IODispatchers.Default结构化并发-CoroutineScope
背景：上家公司干了三年，开发语言主要用的JAVA和flutter来开发的，新的公司全是kotlin，所以又要把上上家公司用的kotlin要回顾下了，主要还是协程和Jetpack相关。
基础概念
协程
协程并不是一个新的概念，它并不是 Kotlin 发明的。它们已经存在了几十年，并且在 Go 等其他一些编程语言]]></description><category></category></item><item><title><![CDATA[android 集成Play Install Referrer]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/119249924</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/119249924</guid><author>HUandroid</author><pubDate>Fri, 30 Jul 2021 16:58:40 +0800</pubDate><description><![CDATA[android 集成Play Install Referrer
旧版
在之前集成Google广告归因是采用广播的形式，定义一个匹配INSTALL_REFERRER的广播接收器：
   &lt;receiver
            android:name="com.google.android.gms.analytics.CampaignTrackingReceiver"
            android:enabled="true"
            android:exported="t]]></description><category></category></item><item><title><![CDATA[studio4.2.1 gradle侧边栏没有task问题记录]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/118660881</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/118660881</guid><author>HUandroid</author><pubDate>Sun, 11 Jul 2021 22:04:03 +0800</pubDate><description><![CDATA[studio4.2.1 gradle侧边栏没有task问题记录
最新版的studio4.2.1默认将gradle侧边栏的task关闭了，来提高同步速度。可以在设置里面打开：

取消勾选，就有task了。

]]></description><category></category></item><item><title><![CDATA[转载：Android 声明性布局Compose预研]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/118660704</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/118660704</guid><author>HUandroid</author><pubDate>Sun, 11 Jul 2021 21:58:24 +0800</pubDate><description><![CDATA[一篇在上家公司写的，预研方案，放在公司的技术账号下面了。随着kotlin的流行，Compose越来月成熟，KCP（Kotlin Compiler Plugin）和KSP（Kotlin Symbol Processing API）的未来加持下，会走的很远。
Android 声明性布局Compose预研

...]]></description><category></category></item><item><title><![CDATA[剖析Framework面试-笔记（二）]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/116886514</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/116886514</guid><author>HUandroid</author><pubDate>Sun, 11 Jul 2021 19:54:04 +0800</pubDate><description><![CDATA[剖析Framework面试-笔记其他应用组件相关Service的启动原理Service的绑定原理使用原理UI体系相关进程通信相关线程通信相关
其他应用组件相关
Service的启动原理

获取AMS的binder对象并发起startService的调用。

其中ServiceRecord跟启动的Service是在AMS里面是对应关系的。
pendingStarts是之后调用startServiceCommon的方法。

r.app表示Service对应的进程，r.app.thread表示进程已经就绪。如果r]]></description><category></category></item><item><title><![CDATA[剖析Framework面试-笔记（一）]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/115367711</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/115367711</guid><author>HUandroid</author><pubDate>Fri, 14 May 2021 10:21:22 +0800</pubDate><description><![CDATA[剖析Framework面试-笔记系统服务相关对zygote的理解作用启动流程Zygote怎么启动的进程启动之后做了什么细节与问题Zygote fork 要单线程Zygote的IPC为啥没有采用binder通信？孵化应用进程为什么不交给SystemServer来做，而专门设计一个zygote？android系统的启动android有那些主要的系统进程？这些系统进程怎么启动的？ServiceManager启动流程zygote启动流程SystemServer启动流程zygote启动部分SystemServer的部]]></description><category></category></item><item><title><![CDATA[Recyclerview滑动对齐方式smoothScrollToPosition]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/116715905</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/116715905</guid><author>HUandroid</author><pubDate>Wed, 12 May 2021 18:36:02 +0800</pubDate><description><![CDATA[Recyclerview滑动对齐方式
原因
遇到一个问题，就是常见的双击让Recyclerview跳到知道position，但是跳转却是到对应position的底部，而不是上面对齐。
方法：smoothScrollToPosition(position)
Recyclerview空实现smoothScrollToPosition，最后由对应的LayoutManager实现，这里是LinearLayoutManager
 @Override
    public void smoothScrollToPosi]]></description><category></category></item><item><title><![CDATA[android Gradle插件分类与使用]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/115176639</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/115176639</guid><author>HUandroid</author><pubDate>Sun, 28 Mar 2021 22:36:58 +0800</pubDate><description><![CDATA[android Gradle插件分类与使用简介作用与优点作用优点插件分类脚本插件对象插件内部插件第三方插件对象插件自定义插件DSLAndroid Gradle 插件分类编写与集成编写build.gradle中编写buildSrc编写独立项目编写
简介
Gradle 是一款非常优秀的构建系统工具，它的DSL基于Groovy实现，可以通过DSL来达到你构建的目的。其中提供了插件的概念，基于Gradle进行很好的扩展，而不改变其核心基础，又能满足不同业务的需要。
这里只说android gradle 插件
从Gr]]></description><category></category></item><item><title><![CDATA[android groovy语法与数据结构]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/115113512</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/115113512</guid><author>HUandroid</author><pubDate>Tue, 23 Mar 2021 16:54:32 +0800</pubDate><description><![CDATA[android groovy语法与数据结构语法switchforwith数据结构listmap范围
帮自己记录下语法和数据，对于android开发者而应，groovy写的机会还是比较少的，忘记了就来瞅瞅。groovy的语法与数据结构比较像python，函数比较多，比较灵活。
java的语法跟groovy通用
语法
switch
用法跟java一样，但是类型无限定：字符串、整型、数组、范围（1..5 这样的结构指范围）、类型等。

def x = 1.23
def result
//无限制，可匹配list 某]]></description><category></category></item><item><title><![CDATA[android 初识SPI]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/114838825</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/114838825</guid><author>HUandroid</author><pubDate>Mon, 22 Mar 2021 16:56:38 +0800</pubDate><description><![CDATA[android 初识SPI
SPI全名是Service Provide Interface
官方解释：为某个接口提供服务的机制。
由ServiceLoader通过加载接口类或者抽象类，再通过模块的配置文件，以此扫描获取到多个实现类的全限定名后通过反射操作获取实例来跨模块通信。
官方文档：https://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html
使用
这里的使用仅仅对于android方向的
android组件化通信可以使用SP]]></description><category></category></item><item><title><![CDATA[android Groovy基础语法]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/114399051</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/114399051</guid><author>HUandroid</author><pubDate>Fri, 05 Mar 2021 17:35:03 +0800</pubDate><description><![CDATA[Groovy基础语法Groovy基础语法变量引号区别string用法闭包声明、调用、返回this owner delegate 区别和使用
Groovy基础语法
变量
引号区别
Groovy可以用单引号、双引号、三引号来表示字符串，但是各自还是有区别的。

单引号
内部不能引用扩展表达式，如下的 name 字段 是不能引用到的。
要处理特殊字符，比如换行 、内部引号、斜杠等

def name = 'test'
def sex = 'name : ${name}'
def age = 'arg \n 33']]></description><category></category></item><item><title><![CDATA[Mac 搭建Groovy环境]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/114359409</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/114359409</guid><author>HUandroid</author><pubDate>Thu, 04 Mar 2021 11:08:55 +0800</pubDate><description><![CDATA[Mac 搭建Groovy环境
下载
下载地址：https://groovy.apache.org/download.html
mac用户可以使用brew下载，但是也比较麻烦，还是推荐直接下载zip包就好了。
解压后顺便看下bin目录下的三个命令：

groovy
执行编译groovy编译版calss文件，相当于java 命令
groovyc
将groovy编译成class文件，相当于javac命令
groovysh
执行编译groovy脚本

环境配置
先copy 解压后的groovy文件下的bin目录路况]]></description><category></category></item><item><title><![CDATA[android ViewFlipper实现跑马灯]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/114241548</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/114241548</guid><author>HUandroid</author><pubDate>Mon, 01 Mar 2021 00:03:24 +0800</pubDate><description><![CDATA[ViewFlipper实现跑马灯
实现跑马灯效果很简单，直接设置Textview的属性android:ellipsize="marquee" 就行了，然后主要焦点的抢占问题就行了，但这里是横向的跑马灯。
ViewFlipper可以实现竖直方法的跑马灯效果
介绍
ViewFlipper可以理解成提供多个视图直接之前切换的容器。是继承了FrameLayout的容器布局，所以是可以调用addView方法去添加子视图的，然后设置子视图进入退出动画，就能达到竖直跑马灯的效果了。
ViewFlipper提供了5个自定义]]></description><category></category></item><item><title><![CDATA[android 取消黑暗模式]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/113586013</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/113586013</guid><author>HUandroid</author><pubDate>Wed, 03 Feb 2021 10:13:26 +0800</pubDate><description><![CDATA[取消黑暗模式
在你的AndroidManifest.xml文件中，在application标签下，设置全局android:theme="xxx"：
&lt;style name="BaseAppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar"&gt;
       	...
        &lt;item name="android:forceDarkAllowed" tools:targetApi="q"&gt;false&lt;/item]]></description><category></category></item><item><title><![CDATA[记一Bug：StaggeredGridLayoutManager ：java.lang.IndexOutOfBoundsException: Index: 0, Size: 0]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/112672159</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/112672159</guid><author>HUandroid</author><pubDate>Fri, 29 Jan 2021 15:42:42 +0800</pubDate><description><![CDATA[记一Bug：

]]></description><category></category></item><item><title><![CDATA[Glide 4.0+源码分析]]></title><link>https://blog.youkuaiyun.com/HUandroid/article/details/112600586</link><guid>https://blog.youkuaiyun.com/HUandroid/article/details/112600586</guid><author>HUandroid</author><pubDate>Thu, 28 Jan 2021 17:06:18 +0800</pubDate><description><![CDATA[Glide 4.0+源码分析
写过Glide的使用和一些注意事项了，这次简单分析下Glide的加载图片流程。
  GlideApp.with(context)
                .load(resId)
                .into(imageView);

总体分析
整体框架可以看作以下几个部分：

Glide 初始化系统，负责管理系统其他模块，比如：数据加载器、网络栈等。
RequestManager 创建、初始化以及管理系统所有的Request。
Engine 将资源加载请]]></description><category></category></item></channel></rss>