<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[devnn的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/devnn</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; devnn]]></copyright><item><title><![CDATA[【Android】Android 13系统源码修改与调试]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/140725388</link><guid>https://blog.youkuaiyun.com/devnn/article/details/140725388</guid><author>devnn</author><pubDate>Fri, 26 Jul 2024 22:46:50 +0800</pubDate><description><![CDATA[本文介绍如何使用ASFP导入Android系统源码，如何使用ASFP断点调试Activity，如何修改Launcher App实现去掉谷歌搜索框，如何修改Setings App实现显示自定义设备名称]]></description><category></category></item><item><title><![CDATA[【Android】SharedPreferences阻塞问题深度分析]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/138086118</link><guid>https://blog.youkuaiyun.com/devnn/article/details/138086118</guid><author>devnn</author><pubDate>Sat, 27 Apr 2024 17:43:34 +0800</pubDate><description><![CDATA[Android中SharedPreferences已经广为诟病，它虽然是Android SDK中自带的数据存储API，但是因为存在设计上的缺陷，在处理大量数据时很容易导致UI线程阻塞或者ANR，Android官方最终在Jetpack库中提供了DataStore解决方案，用来替代SharedPreferences]]></description><category></category></item><item><title><![CDATA[【Android】重温Activity生命周期]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/137832051</link><guid>https://blog.youkuaiyun.com/devnn/article/details/137832051</guid><author>devnn</author><pubDate>Tue, 16 Apr 2024 18:00:32 +0800</pubDate><description><![CDATA[Android中用得最多的组件是Activity，而它的生命周期也是最基础的知识，从刚接触Android到工作中会频繁依赖这部分知识。可能大多数人能说出页面新建到页面关闭会走的生命周期，但是还有其它使用场景不多的生命周期鲜为人知，但是作用很大。。]]></description><category></category></item><item><title><![CDATA[【Android】美团组件化路由框架WMRouter源码解析]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/136969237</link><guid>https://blog.youkuaiyun.com/devnn/article/details/136969237</guid><author>devnn</author><pubDate>Sun, 24 Mar 2024 09:30:25 +0800</pubDate><description><![CDATA[Android无论App开发还是SDK开发，都绕不开组件化，组件化要解决的最大的问题就是组件之间的通信，即路由框架。国内使用最多的两个路由框架一个是阿里的ARouter，另一个是美团的WMRouter。这两个路由框架功能都很强大，笔者都有使用过。从源码上来看，WMRouter的架构更加清晰，可读性更强。从扩展性来讲，WMRouter更灵活，且具备很强大的无侵入式扩展性。]]></description><category></category></item><item><title><![CDATA[【Android】为什么在子线程中更新UI不会抛出异常]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/135638486</link><guid>https://blog.youkuaiyun.com/devnn/article/details/135638486</guid><author>devnn</author><pubDate>Wed, 17 Jan 2024 00:43:07 +0800</pubDate><description><![CDATA[众所周知，Android App在子线程中是不允许更新UI的，否则会抛出异常详细异常信息见下图。笔者偶然发现在子线程中也是可以更新UI的，这是什么情况呢？]]></description><category></category></item><item><title><![CDATA[【Kotlin】协程的字节码原理]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/135610313</link><guid>https://blog.youkuaiyun.com/devnn/article/details/135610313</guid><author>devnn</author><pubDate>Mon, 15 Jan 2024 21:30:15 +0800</pubDate><description><![CDATA[协程是Koltin语言最重要的特性之一，也是最难理解的特性。网上关于kotlin协程的描述也是五花八门，有人说它是轻量级线程，有人说它是无阻塞式挂起，有人说它是一个异步框架等等，众说纷芸。]]></description><category></category></item><item><title><![CDATA[【Android】Ubuntu20.04编译Android 13并用模拟器运行]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/131868022</link><guid>https://blog.youkuaiyun.com/devnn/article/details/131868022</guid><author>devnn</author><pubDate>Sat, 22 Jul 2023 20:09:15 +0800</pubDate><description><![CDATA[一直好奇Android系统是怎么定制的，直到亲自走一遍Android系统编译流程才发现并没想象的复杂。这就跟app开发一样，Google官方其实都提供了平台、文档、IDE及一些工具，咱们只要按照官方提供的指南来操作就行了。如果Android没有提供这样一个开放的系统、完善的生态，咱们就不可能开发出各种 app以及各种定制的Android系统。
]]></description><category></category></item><item><title><![CDATA[【Unity3d】Unity3d在Android平台上输入框的实现源码分析]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/130541829</link><guid>https://blog.youkuaiyun.com/devnn/article/details/130541829</guid><author>devnn</author><pubDate>Sun, 07 May 2023 16:34:19 +0800</pubDate><description><![CDATA[Unity3d引擎中有很多与Android原生交互的功能，比如如何调用Android渲染、Unity输入框的实现、Unity权限的申请、Unity调用相机功能等等，其实这些就是调用Android的api实现的。所有Java层的实现代码都是在`unity-classes.jar`这个jar包中。这篇文章主要梳理一下Unity输入框的实现以及如何对输入框进行改造，顺带带出一些其它重要知识点。]]></description><category></category></item><item><title><![CDATA[【Unity3d】Unity与Android之间通信]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/129099563</link><guid>https://blog.youkuaiyun.com/devnn/article/details/129099563</guid><author>devnn</author><pubDate>Sat, 18 Feb 2023 20:36:04 +0800</pubDate><description><![CDATA[在unity开发或者sdk开发经常遇到unity与移动端原生层之间进行通信，这里把它们之间通信做一个整理。]]></description><category></category></item><item><title><![CDATA[【Unity3d】Unity与iOS之间通信]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/129098279</link><guid>https://blog.youkuaiyun.com/devnn/article/details/129098279</guid><author>devnn</author><pubDate>Sat, 18 Feb 2023 13:22:00 +0800</pubDate><description><![CDATA[在unity开发或者sdk开发经常遇到unity与移动端原生层之间进行通信，这里把它们之间通信做一个整理。]]></description><category></category></item><item><title><![CDATA[【Kotlin】by lazy关键字的实现原理]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/127811334</link><guid>https://blog.youkuaiyun.com/devnn/article/details/127811334</guid><author>devnn</author><pubDate>Sat, 12 Nov 2022 00:21:43 +0800</pubDate><description><![CDATA[kotlin的by lazy关键字是很常用的，它表示延时初始化变量，只在第一次使用时才给它初始化。那么它是如何实现这种功能的呢？这篇文章从字节码和Java语言的角度揭密它的实现原理。]]></description><category></category></item><item><title><![CDATA[【Kotlin】从字节码角度理解kotlin构造函数、成员变量、init代码块执行顺序]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/127620245</link><guid>https://blog.youkuaiyun.com/devnn/article/details/127620245</guid><author>devnn</author><pubDate>Mon, 31 Oct 2022 18:25:30 +0800</pubDate><description><![CDATA[kotlin的构造函数、init代码块、成员变量初始化三者执行顺序是怎样的? 这篇文档从节字码的角度去理解它们的逻辑。]]></description><category></category></item><item><title><![CDATA[【Android】字节码插桩技术实现卡顿监控]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/127588667</link><guid>https://blog.youkuaiyun.com/devnn/article/details/127588667</guid><author>devnn</author><pubDate>Sat, 29 Oct 2022 18:51:51 +0800</pubDate><description><![CDATA[字节码插桩早已不是什么新鲜的技术了，但时至今日仍然在广泛应用。它能鬼使神差一般改变我们的代码，实现一些功能让我们看不见摸不着。像Arouter、Hilt、Tinker、Matrix这些框架都在使用这项技术。插桩是字节码编程的一个应用，这里主要是使用字节码编程技术。字节码编程能解决很多问题，比如自动生成class，自动修改字节码，自动添加日志代码，自动插入代码实现卡顿监控。笔者通过字节码插桩技术实现自动统计方法耗时，实现UI卡顿监控，通过这个案例了解字节码插桩的全过程。]]></description><category></category></item><item><title><![CDATA[【Android】深入理解Android View的绘制流程]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/127500258</link><guid>https://blog.youkuaiyun.com/devnn/article/details/127500258</guid><author>devnn</author><pubDate>Mon, 24 Oct 2022 23:03:54 +0800</pubDate><description><![CDATA[- View是如何被渲染到屏幕中的？
- ViewRoot、DecorView、Activity、Window、WindowManager是什么关系？
- View和Surface是什么关系？
- View和SurfaceFlinger、OpenGL ES是什么关系？]]></description><category></category></item><item><title><![CDATA[【Android】Android ANR产生过程与分析方法]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/127138547</link><guid>https://blog.youkuaiyun.com/devnn/article/details/127138547</guid><author>devnn</author><pubDate>Sun, 02 Oct 2022 17:44:30 +0800</pubDate><description><![CDATA[Android ANR问题一直是比较难解决的问题，一来它比较难以复现，二来复现后也不太好分析。这篇文件梳理一下ANR问题产生的过程以及出现ANR问题拿到日志文件如何进行定位原因。其实关于ANR线上监控也是比较棘手的，看了这篇文章我们再去看一些ANR端上监控方案(比如微信Matrix)也许思路更多清晰。]]></description><category></category></item><item><title><![CDATA[【Android】EventBus 3.x使用APT提升性能]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/127051135</link><guid>https://blog.youkuaiyun.com/devnn/article/details/127051135</guid><author>devnn</author><pubDate>Mon, 26 Sep 2022 13:28:17 +0800</pubDate><description><![CDATA[EventBus 3.0除了支持注解，还有一个鲜为人知的功能，那就是使用APT来搜集SubscriberMethod。这是一个可选的功能，需要额外添加支持。使用APT可以在项目编译期间搜集所有的SubscriberMethod，默认是在运行期间通过反射去搜索subscriber，这样势必存在性能损耗。]]></description><category></category></item><item><title><![CDATA[【Android】Android Binder进程间通信AIDL示例与源码分析]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/127028386</link><guid>https://blog.youkuaiyun.com/devnn/article/details/127028386</guid><author>devnn</author><pubDate>Sat, 24 Sep 2022 19:48:55 +0800</pubDate><description><![CDATA[众所周知，Android进程间通信采用的是Binder机制。Binder是Android系统独有的进程间通信方式，它是采用mmp函数将进程的用户空间与内核空间的一块内存区域进行映射，免去了一次数据拷贝，相比Linux上的传统IPC具有高效、安全的优点。本文结合AIDL与bindService函数，在Android体系的应用层和Framework层，对Binder通信进行深入剖析，以加深对Binder的了解。]]></description><category></category></item><item><title><![CDATA[【Android】Google AutoService的使用与源码解析]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/126837081</link><guid>https://blog.youkuaiyun.com/devnn/article/details/126837081</guid><author>devnn</author><pubDate>Tue, 13 Sep 2022 19:33:56 +0800</pubDate><description><![CDATA[AutoService是Google开发一个自动生成SPI资源文件的框架。看过一些基于APT的三方框架源码的读者应该有所了解。比如Arouter、EventBus等等。一般我们用它来自动帮我们注册APT文件(全称是Annotation Process Tool，或者叫注解处理器，AbstractProcessor的实现)。很多生成SPI文件的框架也是抄袭它的源码，可见它的作用还不小。]]></description><category></category></item><item><title><![CDATA[【Cocos2dx】Cocos Creator Android平台打包效率优化]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/125237050</link><guid>https://blog.youkuaiyun.com/devnn/article/details/125237050</guid><author>devnn</author><pubDate>Sat, 11 Jun 2022 18:36:58 +0800</pubDate><description><![CDATA[初次接触Cocos Creator小游戏开发，发现构建Android平台的工程后，进行打包，编译效率很慢，基本需要10~20分钟的时间不等，电脑也轰隆隆的响，cpu和内存处于满负载工作。打包过程存在的卡点主要是cocos2dx基础库的编译过程慢，它需要使用ndk全量编译c++代码。...............]]></description><category></category></item><item><title><![CDATA[【Android】Android Drawable与Bitmap互转]]></title><link>https://blog.youkuaiyun.com/devnn/article/details/124790783</link><guid>https://blog.youkuaiyun.com/devnn/article/details/124790783</guid><author>devnn</author><pubDate>Mon, 16 May 2022 00:31:35 +0800</pubDate><description><![CDATA[Drawable转成Bitmap
方法一：创建空Bitmap并用canvas绘制
private Bitmap drawableToBitamp(Drawable drawable)
{    
    //声明将要创建的bitmap
    Bitmap bitmap = null;
    //获取图片宽度
    int width = drawable.getIntrinsicWidth();
    //获取图片高度
    int height = drawable.getIntrinsicHe]]></description><category></category></item></channel></rss>