{"id":13773490,"url":"https://github.com/lulululbj/wanandroid","last_synced_at":"2025-04-08T10:20:56.256Z","repository":{"id":38326206,"uuid":"124984027","full_name":"lulululbj/wanandroid","owner":"lulululbj","description":"Jetpack MVVM For Wanandroid 最佳实践 ！","archived":false,"fork":false,"pushed_at":"2024-02-18T10:48:06.000Z","size":3860,"stargazers_count":1493,"open_issues_count":8,"forks_count":247,"subscribers_count":20,"default_branch":"jetpack-compose","last_synced_at":"2025-04-01T08:44:03.437Z","etag":null,"topics":["coroutines","databinding","jetpack","kotlin","kotlin-mvvm-livedata","lifecycle","livedata","mvvm","viewmodel","wanandroid"],"latest_commit_sha":null,"homepage":"https://juejin.im/post/5cb473e66fb9a068af37a6ce","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lulululbj.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2018-03-13T03:01:40.000Z","updated_at":"2025-03-30T08:40:47.000Z","dependencies_parsed_at":"2023-11-15T03:29:46.346Z","dependency_job_id":"ce9453c2-85e7-4b00-a1ca-8cd559b8a780","html_url":"https://github.com/lulululbj/wanandroid","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lulululbj%2Fwanandroid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lulululbj%2Fwanandroid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lulululbj%2Fwanandroid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lulululbj%2Fwanandroid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lulululbj","download_url":"https://codeload.github.com/lulululbj/wanandroid/tar.gz/refs/heads/jetpack-compose","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247819943,"owners_count":21001394,"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":["coroutines","databinding","jetpack","kotlin","kotlin-mvvm-livedata","lifecycle","livedata","mvvm","viewmodel","wanandroid"],"created_at":"2024-08-03T17:01:16.177Z","updated_at":"2025-04-08T10:20:56.222Z","avatar_url":"https://github.com/lulululbj.png","language":"Kotlin","readme":"之前的 README 文件（在这里可以看到 [真香！Kotlin+MVVM+LiveData+协程 打造 Wanandroid！](https://blog.csdn.net/sunluyao_/article/details/101318799)) 和现有代码其实已经有较大出入，也包含了一些不正确的观点，回来更新一下。\n\n翻一下提交记录，第一次 commit 是在 **13 Mar 2018** ，没记错的话当时是基于 MVP 模式搭建的基础框架，到现在经过 100 多次 commit，整个框架已经完全更新。最新的代码在 **mvvm-kotlin** 分支。\n\n刚从 MVP 过渡到 MVVM ，挺兴奋的，一股脑刷刷的写，其实犯了很多错误。第一次认识到关于 MVVM 的一些错误理解是通过这篇文章 [关于MVC/MVP/MVVM的一些错误认识](https://juejin.im/post/6844903938873901064) ，大家可以仔细阅读这篇文章。\n\n随着对架构的逐步深入认识，对 MVVM 的概念又逐渐模糊起来。在 Android 开发中，到底什么是 MVVM 架构？\n\n\u003e 数据驱动 UI ？\n\u003e\n\u003e ViewModel + LiveData ？\n\u003e\n\u003e 不使用 Databinding 是不是 MVVM ？\n\u003e\n\u003e 不使用双向绑定是不是 MVVM ？\n\n一时之间好像遍地都是 Jetpack MVVM 的相关文章和开源项目，但我却愈发觉得这算不上真正的 MVVM 。我更愿意称之为 **变种 MVP** ，或者它就是 **Jetpack 架构** 。\n\n![](https://user-gold-cdn.xitu.io/2019/4/15/16a21016df9c76c5?w=960\u0026h=720\u0026f=webp\u0026s=15382)\n\n上面这张图就可以清晰的表达它的架构，**它不是 MVP，也不是 MVVM** 。\n\n当然，每个人心中都有自己的架构，欢迎到 issue 区表达自己的看法。\n\n最后简单罗列一下项目的技术点：\n\n* LiveData 作为数据容器，由 ViewModel 进行保存\n* Databinding 负责数据绑定工作\n* 使用 Kotlin Coroutines 完成网络请求等耗时异步任务，其中登录页面尝试使用了 flow \n* koin 负责依赖注入工作\n* ......\n\n作为一个试错项目，后续可能继续引入各种新奇类库或者 gradle 插件，欢迎继续关注。\n\n最后给我的专栏打个广告：\n\n\u003e Android 面试进阶指南目录\n\u003e\n\u003e **计算机网络**\n\u003e 1. [http 速查](https://blog.csdn.net/sunluyao_/article/details/109267554)\n\u003e\n\u003e **Android**\n\u003e 1. [唠唠任务栈，返回栈和启动模式](https://blog.csdn.net/sunluyao_/article/details/107948153)\n\u003e 2. [唠唠 Activity 的生命周期](https://blog.csdn.net/sunluyao_/article/details/108067935)\n\u003e 3. [扒一扒 Context](https://blog.csdn.net/sunluyao_/article/details/108162604)\n\u003e 4. [面试官：为什么不能使用 Application Context 显示 Dialog？](https://blog.csdn.net/sunluyao_/article/details/108373573)\n\u003e 5. [面试官：OOM 可以被 try catch 吗？](https://blog.csdn.net/sunluyao_/article/details/108656480)\n\u003e 6. [面试官：Activity.finish() 之后十秒才回调 onDestroy ？](https://blog.csdn.net/sunluyao_/article/details/109110737)\n\u003e 7. [面试官：如何监测应用的 FPS ？](https://blog.csdn.net/sunluyao_/article/details/109440338)\n\n\n\n\n\n\u003e 添加微信 **bingxinshuo_** ，加入技术交流群 。\n\n![](http://cdn.luyao.tech/wechat/green.png)\n","funding_links":[],"categories":[":art: Pattern"],"sub_categories":["MVVM"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flulululbj%2Fwanandroid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flulululbj%2Fwanandroid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flulululbj%2Fwanandroid/lists"}