Android - 收藏集

Android - 收藏集_算法知识​​ ​​passiontim​


​Android 自定义View的各种姿势1​

​Activity的显示之ViewRootImpl详解​

​Activity的显示之ViewRootImpl初探​

​Activity的显示之Window和View​

​Android系统的创世之初以及Activity的生命周期​

​图解Android事件分发机制(深入底层源码)​

​Android 自定义View的各种姿势2​

​Android 内存泄漏分析与解决​

​Android消息机制​

​Android Binder(也许是最容易理解的)​

​Android 彻底掌握Binder​

​Android序列化​

​Android Fragment详解​

​Android Fragment最佳实践​

​Android TabLayout+ViewPager+Fragment​

​Android ListView​

​Android RecyclerView​

​Android ListView与RecyclerView项目实战​

​Android 动画​

​Android 动画(续)​

​Android HTTP​

​首个hybird商业项目踩坑总结​

​Android并发编程 开篇​

​Android并发编程 多线程与锁​

​Android并发编程 原子类与并发容器​

​SystemServer启动过程(framework)​

​ListView复用View原理分析​

​Android创建绑定服务的3种方法​

​管理应用内存​

​DecorView显示过程​

​Activity setContentView过程分析​

​VelocityTracker用法​

​Android中View的测量measure过程​

​Android WatchDog原理分析​

​Android事件传递流程-从ViewRootImpl到View​

​ViewManager接口分析​

​Android平台开源log工具-Logger​

​Android进程优先级和oom_adj​

​使用gradle减少apk大小​

​Zyote启动之framework​

​常见的apk签名方式​

​Volley源码分析​

​SystemServer启动过程(native)​

​Context、Application和ActivityThread​

​AndroidManifest.xml中applicaiton属性介绍​

​Android播放器音乐信息乱码及其解决方法​

​Zygote启动之native​

​管理 Activity 生命周期​

​Android中ViewGroup的布局layout过程​

​GestureDetector用法​

​LeakCanary和常见内存泄漏场景​

​apk反编译与二次打包​

​Android性能分析工具Systrace​

​Android常见技巧​

​Activity launchMode和taskaffinity​

​Kotlin 知识梳理(13) – 运行时的泛型​

​Dagger2 知识梳理(3) – 使用 dependencies 和 @SubComponent 完成依赖注入​

​Android 知识梳理目录 – 好吧,这是一个很”干”的标题​

​面试算法知识梳理(11) – 二叉树算法第一部分​

​Glide 知识梳理(4) – 自定义animate​

​RxJava2 实战知识梳理(5) – 简单及进阶的轮询操作​

​性能优化工具知识梳理(5) – MAT​

​Kotlin 知识梳理(1) – Kotlin 基础​

​插件化知识梳理(2) – Small 框架之如何引入公共库插件​

​面试算法知识梳理(7) – 数组第四部分​

​图片压缩知识梳理(8) – WebP 使用详解​

​Activity 知识梳理(2) – Activity 栈​

​Framework 源码解析知识梳理(1) – 应用程序与 AMS 的通信实现​

​RxJava2 实战知识梳理(11) – 检测网络状态并自动重试请求​

​插件化知识梳理(7) – 类的动态加载入门​

​性能优化技巧知识梳理(1) – 布局优化​

​View 绘制体系知识梳理(2) – setContentView 源码解析​

​Architecture Components 知识梳理(1) – Lifecycle 示例&原理​

​Material Design 控件知识梳理(9) – TextInputLayout​

​设计模式知识梳理(5) – 结构型 – 外观模式​

​RecyclerView 知识梳理(2) – Adapter​

​零散知识点总结(3) – Android 状态栏知识点总结​

​性能优化技巧知识梳理(3) – 如何排查列表卡顿问题​

​RxJava2 实战知识梳理(14) – 在 token 过期时,刷新过期 token 并重新发起请求​

​多线程知识梳理(9) – ThreadLocal​

​面试算法知识梳理(8) – 二分查找算法及其变型​

​Android 数据存储知识梳理(1) – SQLiteOpenHelper 源码解析​

​Java&Android 基础知识梳理(5) – 类加载&对象实例化​

​Loader 知识梳理(3) – 自定义Loader​

​图片基础知识梳理(1) – ImageView 的 ScaleType 属性解析​

​插件化知识梳理(5) – Small 框架之如何不将插件打包到宿主中​

​RxJava2 实战知识梳理(8) – 使用 publish + merge 优化先加载缓存,再读取网络数据的请求过程​

​插件化知识梳理(4) – Small 框架之如何实现插件更新​

​Android 异步任务知识梳理(3) – AsyncQueryHandler 源码解析​

​Framework 源码解析知识梳理(3) – 应用进程之间的通信实现​

​Canvas&Paint 知识梳理(2) – Canvas 的保存和恢复​

​面试算法知识梳理(9) – 链表算法第一部分​

​Material Design 控件知识梳理(5) – DrawerLayout && NavigationView​

​Material Design 控件知识梳理(2) – AppBarLayout & CollapsingToolbarLayout​

​Kotlin 知识梳理(12) – 泛型类型参数​

​RxJava2 实战知识梳理(6) – 基于错误类型的重试请求​

​Fragment 知识梳理(1) – Fragment 源码解析​

​Service 知识梳理(1) – Service 问题整理​

​Loader 知识梳理(1) – LoaderManager初探​

​Loader 知识梳理(2) – initLoader和restartLoader的区别​

​Architecture Components 知识梳理(3) – ViewModel 示例​

​OkHttp 知识梳理(4) – OkHttp 之缓存源码解析​

​RxJava2 实战知识梳理(1) – 后台执行耗时操作,实时通知 UI 更新​

​RxJava2 实战知识梳理(15) – 实现一个简单的 MVP + RxJava + Retrofit 应用​

​RxJava2 实战知识梳理(13) – 如何使得错误发生时不自动停止订阅关系​

​Canvas&Paint 知识梳理(1) – Canvas 基础​

​Kotlin 知识梳理(3) – 类、对象和接口​

​零散知识点总结(2) – Ubuntu下切换JDK版本​

​Java&Android 基础知识梳理(3) – 内存区域​

​Dagger2 知识梳理(2) – @Qulifier 和 @Named 解决依赖注入迷失​

​Java&Android 基础知识梳理(10) – SparseArray 源码解析​

​多线程知识梳理(4) – synchronized 三部曲之等待/通知模型​

​Java&Android 基础知识梳理(13) – 反射​

​Android 数据存储知识梳理(2) – Android存储目录​

​RecyclerView 知识梳理(4) – ItemDecoration​

​Canvas&Paint 知识梳理(6) – 绘制路线 Path 基本用法​

​性能优化工具知识梳理(3) – 调试GPU过度绘制 & GPU呈现模式分析​

​图片基础知识梳理(3) – Bitmap&BitmapFactory 解析​

​Activity 知识梳理(1) – Activity生命周期​

​Kotlin 知识梳理(11) – 内联函数​

​Java&Android 基础知识梳理(8) – 容器类​

​View 绘制体系知识梳理(8) – obtainStyledAttributes 详解​

​组件化知识梳理(3) – Arouter 源码分析之运行时 SDK​

​Fragment 知识梳理(2) – Fragment 状态保存和恢复​

​组件化知识梳理(2) – Arouter 源码分析之 Complier SDK​

​我是如何准备 Android 技术面试的~​

​Kotlin 知识梳理(6) – Kotlin 的可空性​

​Glide 知识梳理(1) – 基本用法​

​动画体系知识梳理(2) – 转场动画 ContentTransition 实践篇​

​Android 知识梳理目录 – To do​

​面试算法知识梳理(6) – 数组第三部分​

​View 事件传递体系知识梳理(1) – 事件分发机制​

​图片压缩知识梳理(9) – 选择合适的图片格式​

​面试算法知识梳理(3) – 字符串算法第二部分​

​面试算法知识梳理(2) – 字符串算法第一部分​

​插件化知识梳理(6) – Small 源码分析之 Hook 原理​

​面试算法知识梳理(4) – 数组第一部分​

​设计模式知识梳理(2) – 结构型 – 桥接模式​

​RxJava 知识梳理(1) – RxJava 基本思想​

​面试算法知识梳理(1) – 排序算法​

​View 绘制体系知识梳理(3) – 绘制流程之 Measure 详解​

​Fragment 知识梳理(4) – FragmentPagerAdapter 和 FragmentStatePagerAdapter 解析​

​OkHttp 知识梳理(2) – OkHttp 源码解析之异步请求 & 线程调度​

​Kotlin 知识梳理(7) – Kotlin 的类型系统​

​插件化知识梳理(9) – 资源的动态加载示例及源码分析​

​Kotlin 知识梳理(9) – 委托属性​

​Android 面试文档分享​

​NDK 知识梳理(2) – 使用 CMake 进行 NDK 开发之如何编写 CMakeLists.txt 脚本​

​多线程知识梳理(6) – 线程池四部曲之 ThreadPoolExecutor​

​多线程知识梳理(5) – 线程池四部曲之 Executor 框架​

​Java&Android 基础知识梳理(9) – LruCache 源码解析​

​多线程知识梳理(7) – ConcurrentHashMap 实现原理​

​多线程知识梳理(2) – synchronized 三部曲之基本使用​

​性能优化工具知识梳理(4) – Hierarchy Viewer​

​架构设计知识梳理(2) – Flux​

​RxJava2 实战知识梳理(3) – 优化搜索联想功能​

​设计模式知识梳理(6) – 结构型 – 享元模式​

​Java&Android 基础知识梳理(12) – 泛型​

​RxJava2 实战知识梳理(4) – 结合 Retrofit 请求新闻资讯​

​Android 版本适配问题​

​性能优化技巧知识梳理(2) – 内存优化​

​Retrofit 知识梳理(1) – 流程分析​

​Volley 知识梳理 – Volley解析​

​NDK 知识梳理(1) – 使用 CMake 进行 NDK 开发之初体验​

​Activity 知识梳理(3) – Activity状态保存和恢复​

​多线程知识梳理(10) – 死锁的概念​

​OkHttp 知识梳理(3) – OkHttp 之缓存基础​

​RxJava2 实战知识梳理(9) – 使用 timer/interval/delay 实现任务调度​

​View 绘制体系知识梳理(4) – 绘制过程之 Layout 详解​

​插件化知识梳理(8) – 类的动态加载源码分析​

​Material Design 控件知识梳理(6) – Snackbar​

​Canvas&Paint 知识梳理(5) – Paint#setShader​

​Canvas&Paint 知识梳理(3) – 颜色合成 Paint#setColorFilter​

​Java&Android 基础知识梳理(7) – Android 虚拟机​

​Kotlin 知识梳理(4) – 数据类、类委托 及 object 关键字​

​View 事件传递体系知识梳理(2) – 嵌套滑动​

​Material Design 控件知识梳理(8) – TabLayout​

​RxJava2 实战知识梳理(2) – 计算一段时间内数据的平均值​

​Retrofit 知识梳理(2) – Retrofit 动态代理内部实现​

​Framework 源码解析知识梳理(7) – Handler 的 async 标志位​

​组件化知识梳理(1) – Arouter 的基本使用​

​图片压缩知识梳理(1) – PNG 原理​

​Material Design 控件知识梳理(4) – FloatingActionButton​

​Glide 知识梳理(6) – Glide 源码解析之流程剖析​

​RxJava2 实战知识梳理(12) – 实战讲解 publish & replay & share & refCount & autoConnect​

​图片基础知识梳理(2) – Bitmap 占用内存分析​

​View 绘制体系知识梳理(6) – 绘制过程之 requestLayout 和 invalidate 详解​

​面试算法知识梳理(14) – 数字算法​

​设计模式知识梳理(7) – 结构型 – 代理模式​

​View 绘制体系知识梳理(5) – 绘制过程之 Draw 详解​

​架构设计知识梳理(1) – Dagger2​

​Broadcast 知识梳理(1) – BroadcastReceiver 基本概念​

​动画体系知识梳理(1) – 转场动画 ContentTransition 理论篇​

​Kotlin 知识梳理(5) – lambda 表达式和成员引用​

​Android 异步任务知识梳理(1) – AsyncTask 源码解析​

​Dagger2 知识梳理(1) – Dagger2 依赖注入的两种方式​

​性能优化工具知识梳理(8) – Lint​

​Kotlin 知识梳理(10) – 高阶函数:Lambda 作为形参或返回值​

​Java&Android 基础知识梳理(2) – 序列化​

​Weex 知识梳理(1) – 环境搭建​

​Kotlin 知识梳理(8) – 运算符重载及其他约定​

​View 绘制体系知识梳理(1) – LayoutInflater#inflate 源码解析​

​插件化知识梳理(10) – Service 插件化实现及原理​

​零散知识点总结(1) – Gradle 使用配置总结​

​Canvas&Paint 知识梳理(4) – 图像合成 Paint#setXfermode​

​面试算法知识梳理(12) – 二叉树算法第二部分​

​性能优化工具知识梳理(2) – Systrace​

​图片压缩知识梳理(0) – 图片压缩学习计划​

​Java&Android 基础知识梳理(4) – 垃圾收集器与内存分配策略​

​Java&Android 基础知识梳理(0) – Java 基础知识大纲​

​Android 异步任务知识梳理(2) – HandlerThread 源码解析​

​性能优化工具知识梳理(7) – LeakCanary​

​性能优化工具知识梳理(1) – TraceView​

​面试算法知识梳理(13) – 二叉树算法第三部分​

​多线程知识梳理(8) – volatile 关键字​

​RxJava 知识梳理(3) – RxJava2 基础知识小结​

​Java&Android 基础知识梳理(6) – 字节输入输出流​

​Android 数据存储知识梳理(4) – 数据库升级操作的处理策略​

​Fragment 知识梳理(3) – FragmentPagerAdapter 和 FragmentStatePagerAdapter 的数据更新问题​

​Material Design 控件知识梳理(1) – Android Design Support Library 是什么​

​图片压缩知识梳理(5) – VectorDrawable 简介​

​图片压缩知识梳理(2) – 减小 PNG 大小​

​Android 数据存储知识梳理(3) – SharedPreference 源码解析​

​图片压缩知识梳理(6) – VectorDrawable 及 AnimatedVectorDrawable 使用详解​

​设计模式知识梳理(3) – 结构型 – 组合模式​

​Java&Android 基础知识梳理(11) – 浅拷贝 Vs 深拷贝​

​Dagger2 知识梳理(4) – @Scope 注解的使用​

​RxJava 知识梳理(2) – RxJava2 操作符实战​

​Glide 知识梳理(3) – 自定义transform​

​面试算法知识梳理(10) – 二叉查找树​

​面试算法知识梳理(5) – 数组第二部分​

​Material Design 控件知识梳理(3) – BottomSheet && BottomSheetDialog && BottomSheetDialogFragment​

​性能优化工具知识梳理(6) – Memory Monitor & Heap Viewer & Allocation Tracker​

​不“误”正业地弄了个人博客,欢迎访问​

​Framework 源码解析知识梳理(4) – 从源码角度谈谈 Handler 的应用​

​Java&Android 基础知识梳理(1) – 注解​

​RxJava2 实战知识梳理(7) – 基于 combineLatest 实现的输入表单验证​

​Material Design 控件知识梳理(7) – BottomNavigationBar​

​Kotlin 知识梳理(2) – 函数的定义与调用​

​OkHttp 知识梳理(1) – OkHttp 源码解析之入门​

​RecyclerView 知识梳理(1) – 综述​

​插件化知识梳理(3) – Small 框架之宿主分身​

​RxJava2 实战知识梳理(10) – 屏幕旋转导致 Activity 重建时恢复任务​

​RecyclerView 知识梳理(3) – LayoutManager​

​Glide 知识梳理(5) – 自定义GlideModule​

​多线程知识梳理(3) – synchronized 三部曲之锁优化​

​Architecture Components 知识梳理(2) – LiveData 示例​

​Glide 知识梳理(2) – 自定义Target​

​Framework 源码解析知识梳理(2) – 应用进程与 WMS 的通信实现​

​View 绘制体系知识梳理(7) – getMeasuredWidth 和 getWidth 的区别​

​多线程知识梳理(1) – 并发编程的艺术笔记​

​设计模式知识梳理(4) – 结构型 – 装饰模式​

​RecyclerView 知识梳理(5) – ItemTouchHelper​

​组件化知识梳理(4) – IOC & AOP 思想在 Arouter 中的应用​

​插件化知识梳理(1) – Small 框架之如何引入应用插件​

​设计模式知识梳理(1) – 结构型 – 适配器模式​

​奇技淫巧之-Android监听键盘弹出与隐藏事件​

​RxImagePicker:从零实现灵活且可高度定制的Android图片选择架构​

​Android6.0权限适配及兼容库的实现​

​MVP 笔记​

​【Android】快速开发偷懒必备(二) 支持DataBinding啦~爽炸,一行实现花式列表​

​逆向思考,优化/重构你的代码逻辑​

​Android自定义ClockView实现时钟效果​

​Android 实现无网络页面切换​

​完全自定义控件-自定义绚丽水波纹效果​

​开发工具总结(8)之图文并茂全面总结上百个AS好用的插件(下)​

​glide 一个强大的图片加载框架​

​听说你Binder机制学的不错,来面试下这几个问题(二)​

​Android——MVP——封装一个通用的Module​

​Android适配全面总结(三)—-ROM适配​

​Android 刘海屏适配总结​

​谷歌Flutter1.0正式版发布​

​Android应用坐标系统全面详解​

​活在android之观察者模式​

​Linux环境下Android开发常用命令​

​Android 拍照获取缩略图以及完整图片(适配androidN)​

​[译]使用MVI打造响应式APP(一):Model到底是什么​

​Android实现沉浸模式的体验​

​Android Handle解析​

​一个根据代码自动生成UML的插件,助你看源码事半功倍​

​Groovy学习笔记4:特殊注解​

​观察者模式学习​

​OkHttp基础学习(五),文件上传​

​躺着过坑—断电导致AVD和SDK Manager无法正常启动​

​Android 一起来看看 ThreadLocal​

​万能的dialog库(包括类似popwindow效果)​

​Android 自定义View学习(十四)——View滑动学习​

​手把手教你从零开始做一个好看的 APP – Day four​

​Android——RecyclerView入门学习之DiffUtil(四)​

​一次使用Kotlin实现酷炫多选操作的尝试​

​Android 带你撸一个好玩的 DoodleView(涂鸦)​

​十分钟了解Android触摸事件原理(InputManagerService)​

​Android 自定义view,画图板练习​

​Android 打造一个丝滑的自动轮播控件​

​Android Camera 系列(三)Camera API 详解​

​设计模式(一) 工厂模式 五种写法总结​

​我的 2017​

​RxJava常用操作符​

​Android 自定义view相关​

​为你的Android Studio打造帅气的LogCat配色​

​编辑距离 (Levenshtein Distance算法)​

​Android 自定义View学习(十三)——View触控事件学习​

​Android DEPPLINK、APPLink原理简析​

​不要打破链式调用!一个极低成本的RxJava全局Error处理方案​

​Flutter基础篇(7)– Flutter更新错误全面解决方案(图文+视频讲解)​

​Android 读取联系人数据库​

​简单图片加载框架的打造-(了解如何设计一个图片加载框架)​

​Android 解锁 Gradle 依赖新姿势​

​Android官方架构组件DataBinding双向绑定篇: 观察者模式的殊途同归​

​当Android遇到单例模式​

​Http基础知识学习(一)​

​面试必备:LinkedList源码解析(JDK8)​

​[译]Android开发从Dagger2迁移至Kodein的感受​

​SQL定义​

​Material Design学习:DrawerLayout+NavigationView​

​Android窗口管理分析(1):View如何绘制到屏幕上的主观理解​

​Android动手实现一个侧滑删除控件,支持Recyclerview​

​使用友盟分享和登陆以及使用时要注意的坑​

​活在Android之Builder模式​

​OkHttp基础学习(一),Get请求​

​Linux工具命令之crontab​

​DiskLruCache简介​

​完全自定义控件-简单环形进度条制作​

​手把手教你从零开始做一个好看的 APP – Day five​

​Flutter基础篇(1)– 跨平台开发框架和工具集锦​

​Android——RecyclerView入门学习之ItemDecoration(一)​

​Android硬件加速(二)-RenderThread与OpenGL GPU渲染​

​Flutter进阶篇(5)– 使用Flutter创建插件详解并发布到Pub库​

​Java多边型无序点排序(地图绘制多边形)​

​Gradle学习笔记(一)基本配置​

​gson解析assets目录下的json文件(给新手看的)​

​仿淘宝、京东拖拽商品详情(可嵌套ViewPager、ListView、WebView、FragmentTabhost)​

​Swift 与 Kotlin 的简单对比,简直是太像了​

​RxJava——基础学习(六),过滤操作符​

​Android官方架构组件Paging-Ex:为分页列表添加Header和Footer​

​Android匿名共享内存(Ashmem)原理​

​Android 开发中零散知识点记录​

​正则表达式学习(上)​

​理解RxJava(四)Subject用法及原理分析​

​Android 一起来看看面试必问的消息机制​

​[译]Java将Powermock和Mockito搭配进行单元测试​

​Android内容服务ContentService原理浅析​

​程序猿Skr —– Flutter之歌​

​Android Bitmap变迁与原理解析(4.x-8.x)​

​Material Design学习:CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout​

​告别Dagger2模板代码:DaggerAndroid原理解析​

​教你打造Android揭面水波动画库-AnimationHelper​

​Flutter 开发遇到问题​

​Android——CoordinatorLayout之Behavior入门学习(下)​

​Android状态模式的几种应用场景​

​简单几行代码让ViewPager实现垂直滑动效果​

​Android 一起来看看 HttpURLConnection 和 HttpClient 的区别​

​Zxing二维码扫描和那些坑​

​我的 2018​

​认识Concurrent包中的 CAS​

​Android自定义View:MeasureSpec的真正意义与View大小控制​

​Android中gradle的implementation和api指令的区别​

​Android meta-data知识介绍及应用​

​从几行代码学习Java类加载机制-从懵逼到放弃​

​Android面试:主线程中的Looper.loop()一直无限循环为什么不会造成ANR?​

​闲散整理,带你走进Android短信源码​

​Android在string.xml中加粗文字​

​Java 打印心形​

​Android 计时的两种思路​

​Android中的内存泄漏和内存溢出.md​

​全面总结侧滑菜单的5种实现方式​

​JNI源码分析 (并实现JNI动态注册)​

​Material Design学习:ToolBar 开发使用简介​

​CalendarListView 日历列表​

​Android 撸起袖子,自己封装 DialogFragment​

​TitleItemDecoration​

​最全的BAT大厂面试题整理​

​一行Java代码实现RecyclerView的Adapter?一行都不需要!​

​程序员漫画系列-Linux内核里面的那些小企鹅们​

​Android 动画基础知识学习(上)​

​Activity生命周期函数理解​

​手把手教你从零开始做一个好看的 APP – Day one​

​设计模式(二) 三种适配器模式 总结和使用场景​

​程序员在简书|一个小城市,小公司的小程序员​

​程序员的江湖,黑话一定要牢记​

​Android 神兵利器Dagger2使用详解(三)MVP架构下的使用​

​2017年你绝对想尝试的25个新安卓库(持续更新中…)​

​小知识-Android一个应用多个图标的几种实现方式​

​【游客必看】 博主所有文章目录​

​Android 自定义View学习(二)——开始了解Canvas和Paint​

​Java编程思想第21章并发读书笔记(下)​

​常用Java并发数据结构​

​Flutter进阶篇(4)– Flutter的Future异步详解​

​教你如何最快写出酷炫的dialog对话框​

​开发工具总结(5)之Markdown语法图文全面详解及其工具介绍​

​AndroidStudio基本debug调试技巧纵览​

​动态图解&实例 ConstraintLayout Chain​

​Android 一起来看看 7.0 的新特性 FileProvider​

​Android 一个另类的显示圆形图片方式​

​Android8.0适配前台定位服务service​

​Android 实习 | 如何在春招中拿到满意的 offer​

​Android浅析SurfaceView​

​Gradle学习笔记(三)管理依赖​

​OkHttp基础学习(四),无网络读取本地缓存,有错误,待改正​

​Android 滑动选择身高体重控件——RulerView​

​10分钟学会ikvStockChart制作K线图(股票走势图)​

​Android —— 微信Sqlite数据库框架WCDB学习​

​当Android遇见工厂模式​

​Android 自定义View学习(一)——准备​

​WebView深度学习(一)之WebView的基本使用以及Android和js的交互​

​一个工程带你学会简单使用RxJava+Retrofit​

​Android 简易签名板​

​【Android】你可能不知道的Support(一) 0步自动定向刷新SortedList​

​【Android】ListView、RecyclerView、ScrollView里嵌套ListView 相对优雅的解决方案:NestFullListView​

​优化Android Studio/Gradle构建​

​针对Android中类的重载方法很多时的几种优化解决方案​

​几步教你怎么写MVP​