[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7498":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":40,"readmeContent":41,"aiSummary":42,"trendingCount":16,"starSnapshotCount":16,"syncStatus":43,"lastSyncTime":44,"discoverSource":45},7498,"AndroidStudy","crazyqiang\u002FAndroidStudy","crazyqiang","🔥 Android学习知识点总结 Jetpack、MVVM、MVI、Kotlin、ViewPager2、JUC多线程等，欢迎star！","http:\u002F\u002Fblog.csdn.net\u002Fu013700502",null,"Kotlin",2226,485,40,5,0,3,57.36,false,"master",true,[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"android","androidx-viewpager2","banner","dialog","dialogfragment","gradle","handlerthread","jetpack","jetpack-datastore","jetpack-lifecycle","jetpack-livedata","jetpack-mvvm","jetpack-viewmodel","juc-multithread","kotlin-dsl","mvvm","thread","2026-06-12 04:00:34","## 1、扫码关注\n**欢迎`扫描下方二维`或搜索微信公众号 `代码说` 关注我的微信公众号查看最新文章，期待您的关注**~\n\u003Cimg src=\"https:\u002F\u002Fxmkp-1253152423.cos.ap-beijing.myqcloud.com\u002F6871677331463_.pic.jpg\" width=\"300\">\n\n- 扫描二维码下载APK示例\n\n![apk](https:\u002F\u002Fimg-blog.csdnimg.cn\u002F16b3a4447ccb43b9a72280e6b5821cf5.png)\n或者 [点击此处链接下载APK](https:\u002F\u002Fwww.pgyer.com\u002FQO2p)\n\n## 2、更新日志\n库 | 更新日志 | 备注\n:----|:----|:----\nlib_dialog | __NOTE:__ dialog库已迁移到maven仓库，引入方式：\u003Cbr> __implementation 'io.github.mqcodedev:lib_dialog:1.3.0'__ \u003Cbr>别忘了在根目录下的build.gradle中声明 mavenCentral()，现在新建项目默认会自动引入\u003Cbr>\u003Cbr> Jcenter引入方式：\u003Cbr>~~implementation 'com.ninetripods:lib-dialog:1.1.0'~~\u003Cbr>未来Jcenter不允许更新版本，墙裂建议使用maven方式引入 \u003Cbr>\u003Cbr> 版本改动说明：[Dialog库README文档](https:\u002F\u002Fgithub.com\u002Fcrazyqiang\u002FAndroidStudy\u002Fblob\u002Fmaster\u002Flib_dialog\u002FREADME.md)\u003Cbr>Blog地址：[Android基于DialogFragment封装一个通用的Dialog](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F82777402)\nlib_viewpager2 |基于ViewPager2实现的自动(手动)无限轮播，支持自定义ItemView及转场动画等\u003Cbr>引入方式:\u003Cbr> __implementation 'io.github.mqcodedev:lib_mvpager2:1.0.0-rc3'__\u003Cbr>\u003Cbr> 使用说明：[MVPager2库README文档](https:\u002F\u002Fgithub.com\u002Fcrazyqiang\u002FAndroidStudy\u002Fblob\u002Fmaster\u002Flib_viewpager2\u002FREADME.md)\u003Cbr> Blog地址：\u003Cbr>1、[深入理解ViewPager2原理及其实践(上篇)](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002Fzb_A3Ytqvc7smFCB4U8YYA)\u003Cbr>2、[深入理解ViewPager2原理及其实践(下篇)](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002F5M7rNBbhg3_gHbaOF_WZZA)\u003Cbr>3、[Android仿淘宝、京东Banner滑动查看图文详情](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FxMh-h5wJHO6By6l4bjQc8g) |基本使用：\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fimg-blog.csdnimg.cn\u002F3be2a0c909ef4f258e41d7eb9c8a3f22.gif\" width=\"300\">\u003Cbr>\u003Cbr>仿淘宝搜索栏上下轮播：\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fimg-blog.csdnimg.cn\u002F46946afd62884207b758e79ab845d8ae.gif\" width=\"300\">\u003Cbr>\u003Cbr>仿淘宝、京东Banner滑动查看图文详情:\u003Cbr> \u003Cimg src=\"https:\u002F\u002Fimg-blog.csdnimg.cn\u002Fd4abcaaa422c4651bd63d7580c5d71de.gif\" width=\"300\">\n\n## 3、Blog发布\n系列 | 备注\n:----|:----\nJetpack | 1、Lifecycle： [Android Jetpack系列之Lifecycle](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F118469311)\u003Cbr>2、LiveData ：[Android Jetpack系列之LiveData](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F118866217)\u003Cbr>3、ViewModel：[Android Jetpack系列之ViewModel](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F118962560)\u003Cbr>4、LiveDataBus：[Android基于LiveData实现消息总线](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F120170790)\u003Cbr>5、Jetpack MVVM：[Android Jetpack系列之MVVM使用及封装](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F120263741)、[Android Jetpack系列之MVVM使用及封装(续)](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F124621595)\u003Cbr>6、Jetpack MVI: [Android Jetpack系列之MVI架构](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FlCgztZ4g2qCftFhR2yJiLw)\u003Cbr>7、DataStore：[Android Jetpack系列之DataStore](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F121076531)\nKotlin | 1、[Kotlin \\| 内联函数inline、noinline、crossinline](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F119923024)\u003Cbr>2、[Kotlin Flow数据流](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F120526170)、[Kotlin Flow数据流的几种使用场景](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F129543737)\u003Cbr> 3、[Kotlin Flow实现一个倒计时功能](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FIJYEj00576ircTkDHjnrcg)\u003Cbr> 4、[Kotlin 作用域函数之let、with、run、also、apply的使用](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F124677447)\u003Cbr> 5、[Kotlin 常用Collection集合操作](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F123115051)\u003Cbr>6、[Kotlin 中正确的使用Handler](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FohkDrjxuIOs5ZZu5tBMAGQ)\u003Cbr>7、[Kotlin 之@JvmOverloads、@JvmStatic、@JvmField、@JvmInline等注解使用总结](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F127140344)\u003Cbr>8、[Kotlin data数据类、copy()函数、sealed密封类](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F127177874)\u003Cbr> 9、[Kotlin 深入理解协程](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FAkG-AataO87VOVS_FIONvA)\u003Cbr> 10、[Kotlin 使用vararg可变参数](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002Fo5Sa_7Sqd1LLDNsY8psA-w)\u003Cbr>11、[Kotlin 理解泛型](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F128422990)\nGradle | 1、Gradle理论与实践一：[Gradle入门](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F85231505 )\u003Cbr>2、Gradle理论与实践二：[Groovy介绍 ](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F85231600)\u003Cbr>3、Gradle理论与实践三：[Gradle构建脚本基础](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F85231661)\u003Cbr>4、Gradle理论与实践四：[自定义Gradle插件](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F85232032)\u003Cbr>5、[Gradle配置中subprojects和allprojects的区别](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F85231687)\u003Cbr>6、[添加buid.gradle配置信息，支持多渠道打包](http:\u002F\u002Fwww.jianshu.com\u002Fp\u002F11484fddda23)\n多线程 | **Java & Android:**\u003Cbr> 1、[Android多线程之HandlerThread](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F76421939) \u003Cbr> 2、[Android多线程之IntentService](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F76421161) \u003Cbr>3、[Android中Callable、Future、FutureTask的概念以及几种线程池的使用](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F76421956)\u003Cbr>4、[Android异步消息处理机制之Handler、Looper、Message](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F62105858) \u003Cbr>5、[Java多线程之ThreadLocal的使用及源码解析](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F105793313)\u003Cbr>6、[Java线程基础知识点](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F112130839)\u003Cbr>7、[JUC系列学习：AbstractQueuedSynchronizer同步器框架及相关实现类](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F112113248)\u003Cbr>8、[JUC系列学习：线程池Executor框架及其实现ThreadPoolExecutor](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F111828418)\u003Cbr>9、[JUC系列学习：阻塞队列BlockingQueue介绍及其相关实现ArrayBlockingQueue、LinkedBlockingQueue等的使用及源码分析](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F107478570)\u003Cbr>10、[JUC系列学习：CountDownLatch、Semaphore、CyclicBarrier的使用及源码解析](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F107478545)\u003Cbr>11、[JUC系列学习：ReentrantLock的使用、源码解析及与Synchronized的异同](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F107478281)\u003Cbr>12、[JUC系列学习：ReentrantReadWriteLock的使用及源码解析](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F107478493)\u003Cbr>13、[Java生产者、消费者模式的几种实现方式](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F107478721)\u003Cbr>14、[Java多个线程顺序循环执行的几种实现方式](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F107478844)\n深入理解系列 | 1、[Android深入理解View.post()获取宽高及其Window加载View原理](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002F0lz361crGR9Y5G3ZOZoiVQ)\u003Cbr>2、[Android深入理解RecyclerView的缓存机制](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F105058771)\nAndroid存储 | 1、[Android本地存储之SharedPreferences源码解析](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F53635499)\u003Cbr>2、DataStore：[Android Jetpack系列之DataStore](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F121076531)\u003Cbr>3、[Android内存缓存LruCache源码解析](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F75258325)\u003Cbr>4、[Android使用磁盘缓存DiskLruCache](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F75258257)\u003Cbr>5、[Android使用LruCache、DiskLruCache实现图片缓存+图片瀑布流](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F75258375)\u003Cbr>6、[Android本地存储的几种方式](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F79067909)\u003Cbr>7、[Android数据库Sqlite的基本用法及升级策略](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F78764917)\nAndroid View相关 | __自定义View相关__\u003Cbr>1、[Android自定义View中的常用方法(距离、位置、点击事件)](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F53638314)\u003Cbr>2、[Android View滑动相关的基础知识点](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F73162741)\u003Cbr>3、[Android自定义View工具：Paint&Canvas(一)](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F114494126)\u003Cbr>4、[Android自定义View工具：Paint&Canvas(二)](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F114494191)\u003Cbr>5、[Android Canvas之Path操作](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F114494273)\u003Cbr>__RecyclerView相关__：\u003Cbr>1、[Android深入理解RecyclerView的缓存机制](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F105058771)\u003Cbr>2、[转载：RecyclerView onAttachedToWindow、onDetachedFromWindow、onViewRecycled等执行时机](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F125208803)\u003Cbr>3、[Android使用RecycleView实现魅族手机通讯录界面](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F72818511)\u003Cbr>4、[Android仿QQ侧滑菜单](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F73162684)\u003Cbr>5、[Android高仿QQ小红点](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F73478560)\u003Cbr>6、[深入理解ViewPager2原理及其实践(上篇)](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F122714365)\u003Cbr>7、[深入理解ViewPager2原理及其实践(下篇)](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F122756855)\u003Cbr>__View相关__\u003Cbr>1、[Android ViewTreeObserver使用总结及获得View宽高的几种方法](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002Fr9aNSoYu7FGLaORKUDLhrA)\u003Cbr>__动画相关__：\u003Cbr>1、[Android 补间动画及动画组合AnimationSet常用方法整理](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FldZZ0Dh-iIO6eR-T2zn0Gw)\n字节码插桩 | 1、[自定义Annotation注解及解析](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F79729882)\u003Cbr> 2、[Android 采用AOP方式封装6.0权限管理-待升级](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F79748829)\n弹窗相关 | 1、[Android基于DialogFragment封装一个通用的Dialog](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F82777402)\u003Cbr>2、[Android封装一个通用的PopupWindow](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F71275093)\u003Cbr>3、[Android使用WindowManger实现桌面悬浮窗](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F114453653)\n数据结构&算法 | 1、[Java内存结构 & GC回收](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FaZsyCc8OUOqR7LWVYFKzXA)\u003Cbr>\n其他知识点 | 1、[Android嵌套滑动的分析与实践](https:\u002F\u002Fblog.csdn.net\u002Fu013700502\u002Farticle\u002Fdetails\u002F80834819) \u003Cbr>2、[startActivityForResult被标记为废弃？Activity Result API闪亮登场！](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FebdtPCDmo9Fg3jBfcG8r4w)\n\n## 4、效果展示\n系列 | 备注\n:----|:----\n自定义View、ViewGroup | \u003Cimg src=\"https:\u002F\u002Fp3-juejin.byteimg.com\u002Ftos-cn-i-k3u1fbpfcp\u002F8ccd5e5b797544c4ba261840f70f7357~tplv-k3u1fbpfcp-watermark.image\" width=\"300\">\n\n\n","该项目是针对Android开发者的学习资源库，涵盖了Jetpack、MVVM、MVI、Kotlin、ViewPager2及JUC多线程等知识点的总结与实践。其核心功能包括基于最新Android开发框架和技术的最佳实践示例，如使用DialogFragment封装通用对话框、基于ViewPager2实现无限轮播等，并提供了详细的文档和博客文章支持学习者深入理解相关技术原理。适合正在寻找提升自己Android开发技能或希望了解如何在实际项目中应用这些现代Android开发技术的开发者使用。",2,"2026-06-11 03:12:47","top_language"]