<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Wait_For_Loading的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Wait_For_Loading</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Wait_For_Loading]]></copyright><item><title><![CDATA[FragmentStateAdapter 导致内存泄露的问题记录]]></title><link>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/151180224</link><guid>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/151180224</guid><author>Wait_For_Loading</author><pubDate>Thu, 04 Sep 2025 11:38:06 +0800</pubDate><description><![CDATA[当时在Framgent 初始化时候传入了Activity 结果Leakcanary一直提示Framgent对象内存泄露。但是退出Activity时垃圾就被清理了。这里看了下源码里面使用了Lifecycle。在创建FragmentStateAdapter 一定要传递使用的Activity 还是 Fragment。在开发过程中使用FragmentStateAdapter + ViewPager2来实现了页面切换。]]></description><category></category></item><item><title><![CDATA[Android 使用UDP广播无法接受到消息]]></title><link>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/144347911</link><guid>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/144347911</guid><author>Wait_For_Loading</author><pubDate>Mon, 09 Dec 2024 14:43:17 +0800</pubDate><description><![CDATA[val broadcastAddress = InetAddress.getByName("255.255.255.255") // 或指定子网的广播地址。不要使用这种方式来初始化！Log.e(TAG, "搜索设备错误：${e.message}")func.invoke("发生异常${e.message}", false)Log.e(TAG, "搜索设备错误：${e.message}")]]></description><category></category></item><item><title><![CDATA[如何从InputStream获取完整长度的字节数组]]></title><link>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/132320822</link><guid>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/132320822</guid><author>Wait_For_Loading</author><pubDate>Wed, 16 Aug 2023 15:34:20 +0800</pubDate><description><![CDATA[上面是正常从InputStream读取数据指定一个1024可能不太符合某些业务情况，特别是从网络获取到数据时。每次写IO的时候都忘记，写个笔记防止忘记。如何准确指定长度捏？]]></description><category></category></item><item><title><![CDATA[Android项目没有BuildConfig解决方案]]></title><link>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/131653488</link><guid>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/131653488</guid><author>Wait_For_Loading</author><pubDate>Tue, 11 Jul 2023 09:47:23 +0800</pubDate><description><![CDATA[新建了一个项目发现无论怎么编译清理还是清除缓存都没有 BuildConfig 这个 文件。只需要在gradle中加入。然后在Build一下即可。]]></description><category></category></item><item><title><![CDATA[Kotlin 可空的高阶函数]]></title><link>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/129056495</link><guid>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/129056495</guid><author>Wait_For_Loading</author><pubDate>Thu, 16 Feb 2023 10:47:47 +0800</pubDate><description><![CDATA[kolin 高阶函数]]></description><category></category></item><item><title><![CDATA[FragmentContainerView+BottomNavigationView使用无法点击]]></title><link>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/125394057</link><guid>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/125394057</guid><author>Wait_For_Loading</author><pubDate>Tue, 21 Jun 2022 16:44:47 +0800</pubDate><description><![CDATA[navigation 使用遇到的坑]]></description><category></category></item><item><title><![CDATA[Android 使用PorterDuff.Mode.XOR自定义透明遮罩]]></title><link>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/125043888</link><guid>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/125043888</guid><author>Wait_For_Loading</author><pubDate>Mon, 30 May 2022 14:00:11 +0800</pubDate><description><![CDATA[在业务开发中很多场景都会遇到遮罩。今天使用 PorterDuffXfermode 的XOR模式来绘制一个中间透明的遮罩。

先上一张图看看效果



分析一下：

1：后面的背景是黑色

2：中间还有一个不规则的透明部分 使中间透明就需要使用到 PorterDuff.Mode.XOR

3：还有一个边框

以上如何实现的呢？下面上代码

一：首先继承View


class MaskView @JvmOverloads constructor(
    context: Context,
    a...]]></description><category></category></item><item><title><![CDATA[Room数据库添加字段遇到的问题记录]]></title><link>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/124669363</link><guid>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/124669363</guid><author>Wait_For_Loading</author><pubDate>Mon, 09 May 2022 16:36:20 +0800</pubDate><description><![CDATA[Android 开发项目使用到了Room数据库。在业务不断完善的时候数据库都会发生变化。今天在给表增加列的时候遇到了一个问题。

Migration didn't properly handle xxx

我升级表的目的是为了给表增加一个布尔值

以下是出错的代码：

 从版本1迁移到版本2

在test_records表里面增加一列 is_tourists_data


val MIGRATION_1_2 = object : Migration(1, 2) {
    override fun mi..]]></description><category></category></item><item><title><![CDATA[Android 状态栏常规操作(状态栏显示，状态栏颜色，沉浸式状态栏)]]></title><link>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/119330990</link><guid>https://blog.youkuaiyun.com/Wait_For_Loading/article/details/119330990</guid><author>Wait_For_Loading</author><pubDate>Tue, 03 Aug 2021 15:35:13 +0800</pubDate><description><![CDATA[在app开发中，通常都会修改状态栏样式，当你在搜索引擎上一顿操作后搜到的代码都是过时的。

当你把Android SDK 兼容版本调整到30,你会发现处理状态栏的部分代码开始划上横线(弃用)

问：新版API变成什么了？

答：


WindowInsetsControllerCompat

问：为啥要改？

答：当你打开WindowInsetsControllerCompat的构造方法你就会发现该api处理了不同版本的适配，不同于以前直接操作Window添加各种Flag来处理，看着都乱七八糟的


pub]]></description><category></category></item></channel></rss>