{"id":14979922,"url":"https://github.com/crazyqiang/androidstudy","last_synced_at":"2025-05-14T03:05:42.344Z","repository":{"id":38434675,"uuid":"76628259","full_name":"crazyqiang/AndroidStudy","owner":"crazyqiang","description":"🔥 Android学习知识点总结 Jetpack、MVVM、MVI、Kotlin、ViewPager2、JUC多线程等，欢迎star！","archived":false,"fork":false,"pushed_at":"2025-01-06T16:29:39.000Z","size":18859,"stargazers_count":2161,"open_issues_count":8,"forks_count":479,"subscribers_count":40,"default_branch":"master","last_synced_at":"2025-04-03T08:05:37.842Z","etag":null,"topics":["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"],"latest_commit_sha":null,"homepage":"http://blog.csdn.net/u013700502","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crazyqiang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-12-16T06:32:56.000Z","updated_at":"2025-03-31T14:39:15.000Z","dependencies_parsed_at":"2023-02-16T07:15:32.791Z","dependency_job_id":"6a7de99a-850e-4a9e-965a-710cc5d08e36","html_url":"https://github.com/crazyqiang/AndroidStudy","commit_stats":{"total_commits":555,"total_committers":3,"mean_commits":185.0,"dds":"0.023423423423423406","last_synced_commit":"efe14ddf09461a9d04ef3611a86defed589d4553"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crazyqiang%2FAndroidStudy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crazyqiang%2FAndroidStudy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crazyqiang%2FAndroidStudy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crazyqiang%2FAndroidStudy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crazyqiang","download_url":"https://codeload.github.com/crazyqiang/AndroidStudy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248261916,"owners_count":21074225,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["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"],"created_at":"2024-09-24T14:00:55.154Z","updated_at":"2025-04-10T17:16:24.618Z","avatar_url":"https://github.com/crazyqiang.png","language":"Kotlin","readme":"## 1、扫码关注\n**欢迎`扫描下方二维`或搜索微信公众号 `代码说` 关注我的微信公众号查看最新文章，期待您的关注**~\n\u003cimg src=\"https://xmkp-1253152423.cos.ap-beijing.myqcloud.com/6871677331463_.pic.jpg\" width=\"300\"\u003e\n\n- 扫描二维码下载APK示例\n\n![apk](https://img-blog.csdnimg.cn/16b3a4447ccb43b9a72280e6b5821cf5.png)\n或者 [点击此处链接下载APK](https://www.pgyer.com/QO2p)\n\n## 2、更新日志\n库 | 更新日志 | 备注\n:----|:----|:----\nlib_dialog | __NOTE:__ dialog库已迁移到maven仓库，引入方式：\u003cbr\u003e __implementation 'io.github.mqcodedev:lib_dialog:1.3.0'__ \u003cbr\u003e别忘了在根目录下的build.gradle中声明 mavenCentral()，现在新建项目默认会自动引入\u003cbr\u003e\u003cbr\u003e Jcenter引入方式：\u003cbr\u003e~~implementation 'com.ninetripods:lib-dialog:1.1.0'~~\u003cbr\u003e未来Jcenter不允许更新版本，墙裂建议使用maven方式引入 \u003cbr\u003e\u003cbr\u003e 版本改动说明：[Dialog库README文档](https://github.com/crazyqiang/AndroidStudy/blob/master/lib_dialog/README.md)\u003cbr\u003eBlog地址：[Android基于DialogFragment封装一个通用的Dialog](https://blog.csdn.net/u013700502/article/details/82777402)\nlib_viewpager2 |基于ViewPager2实现的自动(手动)无限轮播，支持自定义ItemView及转场动画等\u003cbr\u003e引入方式:\u003cbr\u003e __implementation 'io.github.mqcodedev:lib_mvpager2:1.0.0-rc3'__\u003cbr\u003e\u003cbr\u003e 使用说明：[MVPager2库README文档](https://github.com/crazyqiang/AndroidStudy/blob/master/lib_viewpager2/README.md)\u003cbr\u003e Blog地址：\u003cbr\u003e1、[深入理解ViewPager2原理及其实践(上篇)](https://mp.weixin.qq.com/s/zb_A3Ytqvc7smFCB4U8YYA)\u003cbr\u003e2、[深入理解ViewPager2原理及其实践(下篇)](https://mp.weixin.qq.com/s/5M7rNBbhg3_gHbaOF_WZZA)\u003cbr\u003e3、[Android仿淘宝、京东Banner滑动查看图文详情](https://mp.weixin.qq.com/s/xMh-h5wJHO6By6l4bjQc8g) |基本使用：\u003cbr\u003e\u003cimg src=\"https://img-blog.csdnimg.cn/3be2a0c909ef4f258e41d7eb9c8a3f22.gif\" width=\"300\"\u003e\u003cbr\u003e\u003cbr\u003e仿淘宝搜索栏上下轮播：\u003cbr\u003e\u003cimg src=\"https://img-blog.csdnimg.cn/46946afd62884207b758e79ab845d8ae.gif\" width=\"300\"\u003e\u003cbr\u003e\u003cbr\u003e仿淘宝、京东Banner滑动查看图文详情:\u003cbr\u003e \u003cimg src=\"https://img-blog.csdnimg.cn/d4abcaaa422c4651bd63d7580c5d71de.gif\" width=\"300\"\u003e\n\n## 3、Blog发布\n系列 | 备注\n:----|:----\nJetpack | 1、Lifecycle： [Android Jetpack系列之Lifecycle](https://blog.csdn.net/u013700502/article/details/118469311)\u003cbr\u003e2、LiveData ：[Android Jetpack系列之LiveData](https://blog.csdn.net/u013700502/article/details/118866217)\u003cbr\u003e3、ViewModel：[Android Jetpack系列之ViewModel](https://blog.csdn.net/u013700502/article/details/118962560)\u003cbr\u003e4、LiveDataBus：[Android基于LiveData实现消息总线](https://blog.csdn.net/u013700502/article/details/120170790)\u003cbr\u003e5、Jetpack MVVM：[Android Jetpack系列之MVVM使用及封装](https://blog.csdn.net/u013700502/article/details/120263741)、[Android Jetpack系列之MVVM使用及封装(续)](https://blog.csdn.net/u013700502/article/details/124621595)\u003cbr\u003e6、Jetpack MVI: [Android Jetpack系列之MVI架构](https://mp.weixin.qq.com/s/lCgztZ4g2qCftFhR2yJiLw)\u003cbr\u003e7、DataStore：[Android Jetpack系列之DataStore](https://blog.csdn.net/u013700502/article/details/121076531)\nKotlin | 1、[Kotlin \\| 内联函数inline、noinline、crossinline](https://blog.csdn.net/u013700502/article/details/119923024)\u003cbr\u003e2、[Kotlin Flow数据流](https://blog.csdn.net/u013700502/article/details/120526170)、[Kotlin Flow数据流的几种使用场景](https://blog.csdn.net/u013700502/article/details/129543737)\u003cbr\u003e 3、[Kotlin Flow实现一个倒计时功能](https://mp.weixin.qq.com/s/IJYEj00576ircTkDHjnrcg)\u003cbr\u003e 4、[Kotlin 作用域函数之let、with、run、also、apply的使用](https://blog.csdn.net/u013700502/article/details/124677447)\u003cbr\u003e 5、[Kotlin 常用Collection集合操作](https://blog.csdn.net/u013700502/article/details/123115051)\u003cbr\u003e6、[Kotlin 中正确的使用Handler](https://mp.weixin.qq.com/s/ohkDrjxuIOs5ZZu5tBMAGQ)\u003cbr\u003e7、[Kotlin 之@JvmOverloads、@JvmStatic、@JvmField、@JvmInline等注解使用总结](https://blog.csdn.net/u013700502/article/details/127140344)\u003cbr\u003e8、[Kotlin data数据类、copy()函数、sealed密封类](https://blog.csdn.net/u013700502/article/details/127177874)\u003cbr\u003e 9、[Kotlin 深入理解协程](https://mp.weixin.qq.com/s/AkG-AataO87VOVS_FIONvA)\u003cbr\u003e 10、[Kotlin 使用vararg可变参数](https://mp.weixin.qq.com/s/o5Sa_7Sqd1LLDNsY8psA-w)\u003cbr\u003e11、[Kotlin 理解泛型](https://blog.csdn.net/u013700502/article/details/128422990)\nGradle | 1、Gradle理论与实践一：[Gradle入门](https://blog.csdn.net/u013700502/article/details/85231505 )\u003cbr\u003e2、Gradle理论与实践二：[Groovy介绍 ](https://blog.csdn.net/u013700502/article/details/85231600)\u003cbr\u003e3、Gradle理论与实践三：[Gradle构建脚本基础](https://blog.csdn.net/u013700502/article/details/85231661)\u003cbr\u003e4、Gradle理论与实践四：[自定义Gradle插件](https://blog.csdn.net/u013700502/article/details/85232032)\u003cbr\u003e5、[Gradle配置中subprojects和allprojects的区别](https://blog.csdn.net/u013700502/article/details/85231687)\u003cbr\u003e6、[添加buid.gradle配置信息，支持多渠道打包](http://www.jianshu.com/p/11484fddda23)\n多线程 | **Java \u0026 Android:**\u003cbr\u003e 1、[Android多线程之HandlerThread](https://blog.csdn.net/u013700502/article/details/76421939) \u003cbr\u003e 2、[Android多线程之IntentService](https://blog.csdn.net/u013700502/article/details/76421161) \u003cbr\u003e3、[Android中Callable、Future、FutureTask的概念以及几种线程池的使用](https://blog.csdn.net/u013700502/article/details/76421956)\u003cbr\u003e4、[Android异步消息处理机制之Handler、Looper、Message](https://blog.csdn.net/u013700502/article/details/62105858) \u003cbr\u003e5、[Java多线程之ThreadLocal的使用及源码解析](https://blog.csdn.net/u013700502/article/details/105793313)\u003cbr\u003e6、[Java线程基础知识点](https://blog.csdn.net/u013700502/article/details/112130839)\u003cbr\u003e7、[JUC系列学习：AbstractQueuedSynchronizer同步器框架及相关实现类](https://blog.csdn.net/u013700502/article/details/112113248)\u003cbr\u003e8、[JUC系列学习：线程池Executor框架及其实现ThreadPoolExecutor](https://blog.csdn.net/u013700502/article/details/111828418)\u003cbr\u003e9、[JUC系列学习：阻塞队列BlockingQueue介绍及其相关实现ArrayBlockingQueue、LinkedBlockingQueue等的使用及源码分析](https://blog.csdn.net/u013700502/article/details/107478570)\u003cbr\u003e10、[JUC系列学习：CountDownLatch、Semaphore、CyclicBarrier的使用及源码解析](https://blog.csdn.net/u013700502/article/details/107478545)\u003cbr\u003e11、[JUC系列学习：ReentrantLock的使用、源码解析及与Synchronized的异同](https://blog.csdn.net/u013700502/article/details/107478281)\u003cbr\u003e12、[JUC系列学习：ReentrantReadWriteLock的使用及源码解析](https://blog.csdn.net/u013700502/article/details/107478493)\u003cbr\u003e13、[Java生产者、消费者模式的几种实现方式](https://blog.csdn.net/u013700502/article/details/107478721)\u003cbr\u003e14、[Java多个线程顺序循环执行的几种实现方式](https://blog.csdn.net/u013700502/article/details/107478844)\n深入理解系列 | 1、[Android深入理解View.post()获取宽高及其Window加载View原理](https://mp.weixin.qq.com/s/0lz361crGR9Y5G3ZOZoiVQ)\u003cbr\u003e2、[Android深入理解RecyclerView的缓存机制](https://blog.csdn.net/u013700502/article/details/105058771)\nAndroid存储 | 1、[Android本地存储之SharedPreferences源码解析](https://blog.csdn.net/u013700502/article/details/53635499)\u003cbr\u003e2、DataStore：[Android Jetpack系列之DataStore](https://blog.csdn.net/u013700502/article/details/121076531)\u003cbr\u003e3、[Android内存缓存LruCache源码解析](https://blog.csdn.net/u013700502/article/details/75258325)\u003cbr\u003e4、[Android使用磁盘缓存DiskLruCache](https://blog.csdn.net/u013700502/article/details/75258257)\u003cbr\u003e5、[Android使用LruCache、DiskLruCache实现图片缓存+图片瀑布流](https://blog.csdn.net/u013700502/article/details/75258375)\u003cbr\u003e6、[Android本地存储的几种方式](https://blog.csdn.net/u013700502/article/details/79067909)\u003cbr\u003e7、[Android数据库Sqlite的基本用法及升级策略](https://blog.csdn.net/u013700502/article/details/78764917)\nAndroid View相关 | __自定义View相关__\u003cbr\u003e1、[Android自定义View中的常用方法(距离、位置、点击事件)](https://blog.csdn.net/u013700502/article/details/53638314)\u003cbr\u003e2、[Android View滑动相关的基础知识点](https://blog.csdn.net/u013700502/article/details/73162741)\u003cbr\u003e3、[Android自定义View工具：Paint\u0026Canvas(一)](https://blog.csdn.net/u013700502/article/details/114494126)\u003cbr\u003e4、[Android自定义View工具：Paint\u0026Canvas(二)](https://blog.csdn.net/u013700502/article/details/114494191)\u003cbr\u003e5、[Android Canvas之Path操作](https://blog.csdn.net/u013700502/article/details/114494273)\u003cbr\u003e__RecyclerView相关__：\u003cbr\u003e1、[Android深入理解RecyclerView的缓存机制](https://blog.csdn.net/u013700502/article/details/105058771)\u003cbr\u003e2、[转载：RecyclerView onAttachedToWindow、onDetachedFromWindow、onViewRecycled等执行时机](https://blog.csdn.net/u013700502/article/details/125208803)\u003cbr\u003e3、[Android使用RecycleView实现魅族手机通讯录界面](https://blog.csdn.net/u013700502/article/details/72818511)\u003cbr\u003e4、[Android仿QQ侧滑菜单](https://blog.csdn.net/u013700502/article/details/73162684)\u003cbr\u003e5、[Android高仿QQ小红点](https://blog.csdn.net/u013700502/article/details/73478560)\u003cbr\u003e6、[深入理解ViewPager2原理及其实践(上篇)](https://blog.csdn.net/u013700502/article/details/122714365)\u003cbr\u003e7、[深入理解ViewPager2原理及其实践(下篇)](https://blog.csdn.net/u013700502/article/details/122756855)\u003cbr\u003e__View相关__\u003cbr\u003e1、[Android ViewTreeObserver使用总结及获得View宽高的几种方法](https://mp.weixin.qq.com/s/r9aNSoYu7FGLaORKUDLhrA)\u003cbr\u003e__动画相关__：\u003cbr\u003e1、[Android 补间动画及动画组合AnimationSet常用方法整理](https://mp.weixin.qq.com/s/ldZZ0Dh-iIO6eR-T2zn0Gw)\n字节码插桩 | 1、[自定义Annotation注解及解析](https://blog.csdn.net/u013700502/article/details/79729882)\u003cbr\u003e 2、[Android 采用AOP方式封装6.0权限管理-待升级](https://blog.csdn.net/u013700502/article/details/79748829)\n弹窗相关 | 1、[Android基于DialogFragment封装一个通用的Dialog](https://blog.csdn.net/u013700502/article/details/82777402)\u003cbr\u003e2、[Android封装一个通用的PopupWindow](https://blog.csdn.net/u013700502/article/details/71275093)\u003cbr\u003e3、[Android使用WindowManger实现桌面悬浮窗](https://blog.csdn.net/u013700502/article/details/114453653)\n数据结构\u0026算法 | 1、[Java内存结构 \u0026 GC回收](https://mp.weixin.qq.com/s/aZsyCc8OUOqR7LWVYFKzXA)\u003cbr\u003e\n其他知识点 | 1、[Android嵌套滑动的分析与实践](https://blog.csdn.net/u013700502/article/details/80834819) \u003cbr\u003e2、[startActivityForResult被标记为废弃？Activity Result API闪亮登场！](https://mp.weixin.qq.com/s/ebdtPCDmo9Fg3jBfcG8r4w)\n\n## 4、效果展示\n系列 | 备注\n:----|:----\n自定义View、ViewGroup | \u003cimg src=\"https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8ccd5e5b797544c4ba261840f70f7357~tplv-k3u1fbpfcp-watermark.image\" width=\"300\"\u003e\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrazyqiang%2Fandroidstudy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrazyqiang%2Fandroidstudy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrazyqiang%2Fandroidstudy/lists"}